十进制存储为BigDecimal:4a58c60,'0.7484999999 999999E2',27(27)而不是74.85

时间:2013-07-24 07:36:24

标签: ruby-on-rails ruby decimal

我创建了一个表,其中一个列创建为:

t.decimal price

我通过这样做创建了一条新记录:

Prices.create(:price => 74.85)

创建的记录显示如下:

#<Price id: 10, price: #<BigDecimal:4925c58,'0.7484999999 999999E2',27(27)>>

为什么会这样?我想设置74.85而不是74.849999 ...

由于

1 个答案:

答案 0 :(得分:1)

这是一个浮点错误。您可以改为使用字符串:

Prices.create(:price => "74.85")

请注意,这不是Rails错误,它是浮点值和BigDecimal的工作方式:

BigDecimal.new(74.85, 0)    #=> #<BigDecimal:7fc37cb7c068,'0.7484999999 9999994315 6581139191 98513031E2',45(54)>
BigDecimal.new("74.85")     #=> #<BigDecimal:7fc37ce69d48,'0.7485E2',18(18)>