为什么 C# 将 C# 中的“相同”浮点数进行比较不同 [重复]

Why C# compares "the same" floating numbers in C# different [duplicate]

提问人:JoJ 提问时间:8/17/2018 最后编辑:StefanJoJ 更新时间:8/17/2018 访问量:88

问:

float a = 0.95f;
float b = 5.05f;
float ab = (a + b);
bool isTrue = (ab == 6.0f);
bool isFalse = ((a + b) == 6.0f);
bool isTrueAgain = ((float)(a + b) == 6.0f);

为什么 isTrue 是真的?

为什么 isFalse 是假的?

enter image description here

C# 点浮 点精度

评论

3赞 Stefan 8/17/2018
有趣的补充:等于ab == (a + b)false
2赞 mjwills 8/17/2018
这些可能会引起人们的兴趣 - blog.paranoidcoding.com/2014/12/22/redundant-cast.html ecma-international.org/publications/files/ECMA-ST/ECMA-335.pdf (12.1.3)
0赞 mjwills 8/17/2018
总之 - 不必是最后一行的 a(根据 C# 规范) - 因此其值可以与第三行显示的值不同。请参阅 dotnetfiddle.net/spRgWV(a + b)float

答: 暂无答案