Ruby步骤功能给出意想不到的结果

时间:2015-10-12 17:40:10

标签: ruby

当我运行以下命令时,

  (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?中回答了我为什么会发生这种情况的问题,但我没有立即发现。

1 个答案:

答案 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,...]