繁体   English   中英

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

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

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

decimal DoubleToDecimal(double value, int numberOfDecimalPlaces)

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

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

我更喜欢一种不涉及到/从字符串转换的方法,因为这似乎效率很低。

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);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM