我需要帮助理解ruby的浮点精度

时间:2015-03-05 07:27:05

标签: ruby floating-point-precision fixnum

前几天我遇到过这个问题,确定它没有给我带来任何麻烦,但我只是好奇它为什么会发生?

1.9.2p320 :001 > 0.39-0.09
 => 0.30000000000000004

2 个答案:

答案 0 :(得分:1)

这是因为Ruby默认使用Double-precision floating-point format。您可以阅读与其相关的问题here。然而,这是一个简短而明确的答案:

  

因为在内部,计算机使用格式(二进制浮点)   它不能准确地表示0.1,0.2或0.3之类的数字。

     

编译或解释代码时,您的“0.1”已经存在   四舍五入到该格式的最接近的数字,这导致一个小的   甚至在计算发生之前就会出现舍入错误。

来源:http://floating-point-gui.de/

答案 1 :(得分:0)

浮点数不能精确地表示所有实数,并且浮点运算不能精确地表示真正的算术运算,这会导致许多令人惊讶的情况。

我建议阅读:https://en.wikipedia.org/wiki/Floating_point#Accuracy_problems

您可能希望使用BigDecimal来避免此类问题。