有人能告诉我为什么下面的语句评估为false?
bool myBoolean = .6 + .3 + .1 == .1 + .3 + .6; // false
它在Javascript和C ++中做同样的事情。
答案 0 :(得分:7)
<子>铌。我正在回答这个问题,因为它也被标记为C ++
由于浮点表示错误,在C ++中上面的结果为false,因为两个浮点数不完全相等。
E.g。 0.1的内部表示接近该值,但不完全是
同样适用于C#。
请允许我链接一个着名的文档(imho)每个处理浮点运算的程序员应该阅读:What Every Computer Scientist Should Know About Floating-Point Arithmetic
答案 1 :(得分:0)
]永远不要相信Floating-Point Arithmetic
。在转换过程中,您可能会失去精度。这就是为什么结果是错误的。我建议你尝试使用以十进制表示法存储数字的十进制类型。因此,您的数字可以准确表示。