如何对C#双null类型进行舍入

本文关键字:类型 舍入 null | 更新日期: 2023-09-27 17:57:49

我想四舍五入一个double?值,这样如果它的值是2.3,结果应该是2,但如果输入为null,结果应该为null。

如何对C#双null类型进行舍入

没有直接的方法来舍入可为null的double。您需要检查变量是否有值:如果有,则四舍五入;否则返回null

如果使用条件?:运算符执行此操作,则需要进行一点强制转换

double? result = myNullableDouble.HasValue
               ? (double?)Math.Round(myNullableDouble.Value)
               : null;

或者:

double? result = null;
if (myNullableDouble.HasValue)
{
    result = Math.Round(myNullableDouble.Value);
}

正如其他人所指出的,一次性完成这项工作很容易。一般来说:

static Func<T?, T?> LiftToNullable<T>(Func<T, T> func) where T : struct
{
    return n=> n == null ? (T?) null : (T?) func(n.Value);
}

现在你可以说:

var NullableRound = LiftToNullable<double>(Math.Round);
double? d = NullableRound(null);

嘿,现在您可以使用任何获取并返回值类型的方法来实现这一点。

return d.HasValue ? Math.Round(d.Value) : (double?)null;