我对进出数据库后获得额外 0.000000000000000001 (左右)的 2 位小数感到有些困惑。
这就是我所做的:(Rails 3.2.8)
创建了一个迁移:
class CreateItems < ActiveRecord::Migration
def change
create_table :items do |t|
t.column :price, :decimal, :precision => 16, :scale => 2
end
end
end
创建了一个模型:
class Item < ActiveRecord::Base
end
然后:
$ rails c
>> i = Item.new
>> i.price = 9.46
>> i.save
>> Item.first.price
=> #<BigDecimal:46b3768,'0.9460000000 000001E1',27(45)>
这是一个 SQLite 数据库,在那里看起来一切正常:
$ rails db
>> select * from items;
1|9.46
请注意,我注意到发生这种情况的唯一数字是 9.46。额外的 0.00000000000001 是从哪里来的?
编辑我知道如果没有小错误,某些数字的浮点表示是不可能的。但是为什么不Item.first.price
等于BigDecimal.new('9.46')
呢?SQLite 是否存储一个浮点数而不是一个整数,并且它应该被除以 10 的次数(这就是我对小数列的期望)?或者 ActiveRecord 中是否有一些我不知道从数据库中检索值的问题?见下文:
$ rails c
>> decimal = BigDecimal.new('9.46')
>> Item.first.price == decimal
=> false