首页 > 解决方案 > Double ToString 给出四舍五入的结果

问题描述

为什么这个简单的控制台应用程序输出100000000000000而不是99999999999999.99或至少99999999999999.984像调试器显示的那样?

static void Main(string[] args)
{
    double bigNum = 99999999999999.99;
    Console.WriteLine(bigNum); //Console.WriteLine will internally ToString, but you can add what ever ToString() you want here the result will always be undesired
}

控制台输出:

没有

调试输出:

为了澄清:

是的,我知道值类型decimal及其优于 的精度double,但我从未听说过ToString()double给出错误的结果。

标签: c#doubleprecision

解决方案


标准转换见:MSDN :ToString

如果 format 为 null 或空字符串,则返回值使用通用数字格式说明符 ("G") 进行格式化。

这将向您显示,如果可能,默认数字格式说明符“G”将默认为最多 15 位:G-format specifier

按照要求:

double bigNum = 99999999999999.99;

Console.WriteLine(bigNum);                 //default
//100000000000000
Console.WriteLine(bigNum.ToString("G"));   //explicit default
//100000000000000
Console.WriteLine(bigNum.ToString("G17")); //G17
//99999999999999.984

推荐阅读