Rails 在 DB 级别舍入浮点数

equ*_*nt8 5 ruby mysql ruby-on-rails rounding

我有一个带有浮动列的表(我正在使用 MySQL、mysql2 gem,一切都是标准的)

create_table :some_table do |t| 
  t.float  :amount 
end 
Run Code Online (Sandbox Code Playgroud)

当我这样做时,我正在控制台上玩

a = SomeTable.new
a.amount = 9999.99
a.save!
#9999.99
a.amount
#9999.99
a.reload
a.amount
#9999.99
Run Code Online (Sandbox Code Playgroud)

一切还好

a = SomeTable.new
a.amount = 9999.999
a.save!
#9999.999
a.amount 
#9999.999
a.reload
a.amount
#10000.00
Run Code Online (Sandbox Code Playgroud)

正如您所看到的 ruby​​ (或rails)对数字进行四舍五入。

有人能解释一下这是为什么吗?……还是只有我一个人?

DGM*_*DGM 4

如果您想了解有关浮点数的所有信息以及它们为何存在舍入误差,请参阅每个计算机科学家应该了解的浮点运算知识

如果您想做货币计算,请不要使用浮动!使用定点数据类型。如果您使用 Rails 迁移,则十进制类型就是您想要的类型,如此处所述