Double ToString提供圆形结果

时间:2018-04-26 14:47:19

标签: c# double precision

为什么调试器显示这个简单的控制台应用输出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
}

控制台输出:

Nope

调试输出:

澄清:

是的,我知道价值类型decimal及其优于double的精确度,但我从未听说过ToString() double可能会给出错误的结果。< / p>

1 个答案:

答案 0 :(得分:2)

有关标准ToString转化的信息,请参阅:MSDN

  

如果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