在阅读了这个问题以及这个msdn博客之后,我尝试了一些示例来对此进行测试:
Console.WriteLine(0.8-0.7 == 0.1);
Run Code Online (Sandbox Code Playgroud)
是的,预期输出为False。因此,我尝试将表达式的两端都强制转换为double,float以查看是否可以获得不同的结果:
Console.WriteLine((float)(0.8-0.7) == (float)(0.1));
Console.WriteLine((double)(0.8-0.7) == (double)(0.1));
Run Code Online (Sandbox Code Playgroud)
第一行输出True但第二行输出False,为什么会发生这种情况?
此外,
Console.WriteLine(8-0.7 == 7.3);
Console.WriteLine(8.0-0.7 == 7.3);
Run Code Online (Sandbox Code Playgroud)
上面的两行都给出True甚至不进行强制转换。还有...
Console.WriteLine(18.01-0.7 == 17.31);
Run Code Online (Sandbox Code Playgroud)
此行输出False。如果将两者都用浮点数相减,则如何从减法18.01中减去8的差?
我试图阅读博客和问题,但似乎找不到其他答案。有人可以向我解释为什么所有这些都是以莱曼的语言发生的吗?先感谢您。
编辑:
Console.WriteLine(8.001-0.001 == 8); //this return false
Console.WriteLine(8.01-0.01 == 8); //this return true
Run Code Online (Sandbox Code Playgroud)
注意:我正在使用.NET小提琴在线c#编译器。