-2

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

1.9.2p320 :001 > 0.39-0.09
 => 0.30000000000000004
4

2 回答 2

1

这是因为 Ruby 默认使用双精度浮点格式您可以在此处阅读与它相关的问题。但是,这是一个简短而清晰的答案:

因为在内部,计算机使用的格式(二进制浮点)根本无法准确表示 0.1、0.2 或 0.3 之类的数字。

当代码被编译或解释时,你的“0.1”已经被四舍五入到该格式中最接近的数字,这会在计算发生之前导致一个小的舍入误差。

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

于 2015-03-05T07:32:57.803 回答
0

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

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

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

于 2015-03-05T10:30:02.513 回答