小编LEE*_*hon的帖子

双精度浮点数和浮点数精度之间的差异

在阅读了这个问题以及这个msdn博客之后,我尝试了一些示例来对此进行测试:

Console.WriteLine(0.8-0.7 == 0.1);
Run Code Online (Sandbox Code Playgroud)

是的,预期输出为False。因此,我尝试将表达式的两端都强制转换为doublefloat以查看是否可以获得不同的结果:

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#编译器。

c# floating-point precision casting

3
推荐指数
1
解决办法
86
查看次数

标签 统计

c# ×1

casting ×1

floating-point ×1

precision ×1