我正在跑步:
[~/ruby/rails/sas]$ ruby --version
ruby 1.8.7 (2009-06-08 patchlevel 173) [universal-darwin10.0]
在Mac Snow Leopard 10.6.3
上任何人都可以帮忙解释为什么Float和BigDecimal减法可能是错误的。
[~/ruby/rails/sas]$ console
Loading development environment (Rails 2.1.1)
>> num = 30.0
=> 30.0
>> num.class
=> Float
>> ex = 28.04.to_d
=> #<BigDecimal:105367e40,'0.284E2',8(8)>
>> ex.class
=> BigDecimal
>> num - ex
=> 1.6
>> _.class
=> Float
>>
我希望结果应该是1.96,我知道也许不建议使用2种不同的数据类型进行算术运算,但这种行为很奇怪。
从现在开始,我必须在进行任何算术运算之前检查变量数据类型。
希望有人能够让我了解正在发生的事情。
答案 0 :(得分:3)
这是Rails 2.1.1中to_d
方法的问题。我试过
ex = BigDecimal.new '28.04'
#=> #<BigDecimal:1209328,'0.2804E2',8(8)>
并使用Rails 2.3.5
ex = 28.04.to_d
#=> #<BigDecimal:219ea18,'0.2804E2',8(8)>
和 num - ex #=&GT; 1.96
工作正常
因此,您有三个选项可以升级rails版本或覆盖to_d方法,或者只使用BigDecimal.new '28.04'
代替to_d
答案 1 :(得分:0)
问题是不 rails 2.1.1,因为我尝试使用rails 2.3.8并获得相同的结果
[~/ruby/rails/sample_2.3.8]$ script/console
Loading development environment (Rails 2.3.8)
>> BigDecimal("28.04")
=> #<BigDecimal:1033eccc8,'0.284E2',8(8)>
>>
我非常确定问题是Ruby 1.8.7 p173标配Snow Leopard 10.6.3,如下所示: