Dot-Net

為什麼 ToString() 舍入我的雙精度值?

  • January 20, 2010

轉換為字元串時如何防止我的雙精度值被舍入?我都試過了Convert.ToStringToString()結果是一樣的。

例如,我的 double 可能看起來像77.987654321,並且兩個字元串轉換轉換為77.98765。我需要保持值的精度不變。

預設情況下,該.ToString()方法Double返回 15 位精度。如果您想要 double 值在內部保存的完整 17 位數字,則需要將“G17”格式說明符傳遞給該方法。

String s = value.ToString("G17");

來自MSDN 文件

預設情況下,返回值僅包含 15 位精度,儘管內部維護最多 17 位。如果此實例的值大於 15 位,則 ToString 返回 PositiveInfinitySymbol 或 NegativeInfinitySymbol 而不是預期的數字。如果您需要更高的精度,請使用“G17”格式規範指定格式,它始終返回 17 位精度,或“R”,如果數字可以用該精度表示,則返回 15 位數字,如果數字只能表示,則返回 17 位數字以最高精度表示。

引用自:https://stackoverflow.com/questions/2105096