为什么调试器显示这个简单的控制台应用输出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
可能会给出错误的结果。< / p>
答案 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