簡體   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