我一直认为你不应该使用浮动数据来节省资金。所以我使用小数。问题是我保存十进制100并将其作为99.9999
放入数据库我有一个名为GameCommission的模型
迁移:
create_table :game_commissions, :force => true do |t|
t.integer :game_id
t.integer :widget_id
t.integer :user_id
t.decimal :amount, :precision => 6, :scale => 4, :default => 0
t.date :end_date
t.timestamps
end
现在我快速制作一个新的GameCommission:
amount = BigDecimal.new("100")
gc = GameCommission.new(:game_id => 1, :widget_id => 1, :user_id => User.last.id, :amount => amount, :end_date => Date.today)
gc.save
gc.amount.to_s
# => "100
金额现在是100,这就是我想要的。但是,如果我再次获取它,金额将更改为99.9999,这也是数据库中保存的金额....
gc = GameCommission.last
gc.amount.to_s
# => "99.9999"
有人知道发生了什么事吗?
答案 0 :(得分:6)
您在:precision => 6, :scale => 4
字段中使用了值:amount
,导致100
缩小为99.9999
,因为3个数字为100加上4个强制小数places = 7,大于6。
:precision => 6, :scale => 4
可以存储来自-99.9999 to 99.9999
的数字,这就是缩小100的原因。
将:precision
更改为7
,您应该好好去。
答案 1 :(得分:0)
您使用的 :amount
类型是什么?根据{{3}},没有这样的东西,但 是:decimal
类型,听起来应该可以解决问题。