如何在 .NET 中将 double 值转换为具有固定小数位数的 decimal 类型的值

How do I convert a double value to a value of type decimal with a fixed number of decimal places in .NET

在 .NET 中,我在双精度变量中有一个值,我需要将其转换为具有指定小数位数的十进制,并根据需要四舍五入。我正在寻找的答案会有这样的原型:

decimal DoubleToDecimal(double value, int numberOfDecimalPlaces)

我能想出的最好办法是将双精度数转换为具有正确小数位数的字符串,然后将其解析回小数位:

return decimal.Parse(
    double.ToString("0." + new string(numberOfDecimalPlaces,'0'))
);

我更喜欢一种不涉及转换 to/from 字符串的方法,因为这看起来效率很低。

decimal DoubleToDecimal(double value, int numberOfDecimalPlaces){
    return Math.Round((decimal)value, numberOfDecimalPlaces);
}

如果您需要保留尾随零,请尝试使用此方法:

Math.Round((decimal)value,numberOfDecimalPlaces)+(0M*((decimal)Math.Pow(10,-numberOfDecimalPlaces)))

参见:

> Math.Round(dd,20)
3.2222222
> (0M*((decimal)Math.Pow(10,-20)))
0.00000000000000000000
> Math.Round(dd,20)+(0M*((decimal)Math.Pow(10,-20)))
3.22222220000000000000

这就是您要找的。 Convert.ToDecimal 将双精度转换为十进制 Math.Round 将您的小数四舍五入到所需的小数位数。

decimal DoubleToDecimal(double value, int numberOfDecimalPlaces)
{
    return Math.Round(Convert.ToDecimal(value), numberOfDecimalPlaces);
}