And*_*ane 20 ruby floating-point rounding bigdecimal floating-point-precision
在Ruby 2.2.0中,为什么:
BigDecimal.new(34.13985572755337, 9)
Run Code Online (Sandbox Code Playgroud)
平等34.0
但是
BigDecimal.new(34.13985572755338, 9)
Run Code Online (Sandbox Code Playgroud)
平等34.1398557
?
请注意,我在64位计算机上运行它.
Tod*_*obs 11
通常,使用Floats无法获得可靠的行为.您错误地使用Float值而不是String值初始化BigDecimals,这会在开头引入一些不精确.例如,在我的64位系统上:
float1 = 34.13985572755337
float2 = 34.13985572755338
# You can use string literals here, too, if your Float can't be properly
# represented. For example:
#
# BigDecimal.new("34.13985572755337", 9)
#
# would be safer, but Float#to_s works fine with the provided corpus.
bd1 = BigDecimal.new(float1.to_s, 9)
bd2 = BigDecimal.new(float2.to_s, 9)
bd1.to_s
#=> "0.3413985572755337E2"
bd2.to_s
#=> "0.3413985572755338E2"
bd1.to_f == float1
#=> true
bd2.to_f == float2
#=> true
Run Code Online (Sandbox Code Playgroud)
这是参数的内部表示很重要的一种情况.因此,您的里程将根据您初始化对象的方式而有所不同.
归档时间: |
|
查看次数: |
903 次 |
最近记录: |