内部舍入问题:对 Ruby 浮点数求和的准确方法?

Amy*_*Amy 7 ruby

这当然是坏的:

(0.1 + 0.1 + 0.1) => 0.30000000000000004

(0.1 + 0.1 + 0.1) == 0.3   # false
Run Code Online (Sandbox Code Playgroud)

我不需要一个完美的总和,只要足以说明两个 Floats 的值相同即可。我能想到的最好方法是将等式两边相乘并取整。这是最好的方法吗?

((0.1 + 0.1 + 0.1) * 1000).round == (0.3 * 1000).round
Run Code Online (Sandbox Code Playgroud)

更新:我坚持使用 Ruby v1.8.7。

Dav*_*dge -1

round 方法支持指定要舍入的小数位数:http://www.ruby-doc.org/core-1.9.3/Float.html#method-i-round

所以

 (0.1 + 0.1 + 0.1).round(1) == (0.3).round(1)
Run Code Online (Sandbox Code Playgroud)

……应该不错。