当我运行以下命令时,
(0..20).step(0.1) do |n|
puts n
end
我收到以下回复:
0.0
0.1
0.2
0.30000000000000004
0.4
0.5
0.6000000000000001
0.7000000000000001
0.8
0.9
1.0
1.1
1.2000000000000002
1.3
1.4000000000000001
1.5
1.6
1.7000000000000002
...
避免此舍入错误的最佳方法是什么?
更新 我之前在另一个问题Is floating point math broken?中回答了我为什么会发生这种情况的问题,但我没有立即发现。
答案 0 :(得分:1)
你可以欺骗并避免0.1
业务的踩踏:
(0..200).map { |n| n.to_f / 10 }
=> [0.0, 0.1, 0.2, 0.3, 0.4, 0.5, 0.6, 0.7,...]