Bor*_*rov 3 c# floating-point double ieee
以下C++程序预计会输出0.300000000000000040000:
cout << setprecision(40) << (0.1 + 0.2) << endl;
Run Code Online (Sandbox Code Playgroud)
但是以下C#代码:
System.Console.WriteLine("{0:F40}", 0.1+0.2);
Run Code Online (Sandbox Code Playgroud)
......未满意地输出0.3000000000000000000000000000000000000000,而它(预期)评估0.1+0.2 == 0.3为False.
'4'在哪里,我该如何输出?
目前尚不清楚是否会想究竟该后跟零4,但我有一些代码,这将允许您打印出任何确切的十进制值double.
所以作为测试应用程序:
using System;
class Test
{
static void Main(string[] args)
{
double d1 = 0.1;
double d2 = 0.2;
Console.WriteLine(DoubleConverter.ToExactString(d1 + d2));
Console.WriteLine(DoubleConverter.ToExactString(0.3));
}
}
Run Code Online (Sandbox Code Playgroud)
结果:
0.3000000000000000444089209850062616169452667236328125
0.299999999999999988897769753748434595763683319091796875
Run Code Online (Sandbox Code Playgroud)
我怀疑是内置的.NET格式化拒绝给你,理由是在该点位不能是"4","信任"可以这么说.它们只是噪声相关的值,它恰好与您真正瞄准的值最接近.
来自以下文档System.Double:
默认情况下,Double值包含15个十进制数字的精度,但内部最多保留17位数.