前几天我遇到过这个问题,确定它没有给我带来任何麻烦,但我只是好奇它为什么会发生?
1.9.2p320 :001 > 0.39-0.09
=> 0.30000000000000004
答案 0 :(得分:1)
这是因为Ruby默认使用Double-precision floating-point format。您可以阅读与其相关的问题here。然而,这是一个简短而明确的答案:
因为在内部,计算机使用格式(二进制浮点) 它不能准确地表示0.1,0.2或0.3之类的数字。
编译或解释代码时,您的“0.1”已经存在 四舍五入到该格式的最接近的数字,这导致一个小的 甚至在计算发生之前就会出现舍入错误。
答案 1 :(得分:0)
浮点数不能精确地表示所有实数,并且浮点运算不能精确地表示真正的算术运算,这会导致许多令人惊讶的情况。
我建议阅读:https://en.wikipedia.org/wiki/Floating_point#Accuracy_problems
您可能希望使用BigDecimal来避免此类问题。