这当然是坏的:
(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)
……应该不错。
| 归档时间: |
|
| 查看次数: |
865 次 |
| 最近记录: |