小编Gau*_*ege的帖子

Ruby Float#round方法与round(2)表现不正确

我了解到建议使用BigDecimal而不是Float,但这个要么是一个bug,要么突出了它的深奥本质Float.似乎Float#round(2)"1.015","1.025"和"1.035"存在问题.

1.015.round(2)
 => 1.01    # => WRONG .. should be 1.02
1.025.round(2)
 => 1.02    # => WRONG .. should be 1.03
1.035.round(2)
 => 1.03    # => WRONG .. should be 1.04
1.045.round(2)
 => 1.05    # => CORRECT
1.016.round(2)
 => 1.02    # => CORRECT
Run Code Online (Sandbox Code Playgroud)

round(3) 工作良好.

1.0015.round(3)
 => 1.002  # => CORRECT
1.235.round(2)
 => 1.24   # => CORRECT 
Run Code Online (Sandbox Code Playgroud)

要在Rails应用程序中修补此问题,我这样做了:

config/initializers/float_mp.rb

require 'bigdecimal'

class Float
  def round(val=0)
     BigDecimal.new(self.to_s).round(val).to_f
  end
end
Run Code Online (Sandbox Code Playgroud)

这似乎是一种奇怪且昂贵的解决方法.这可能是一个错误Float#round吗?

ruby floating-point floating-accuracy ruby-1.9.3

1
推荐指数
1
解决办法
469
查看次数