我有一个带有浮点列的表(我正在使用 MySQL、mysql2 gem,一切都是标准的)
create_table :some_table do |t|
t.float :amount
end
当我这样做的时候,我正在控制台中玩耍
a = SomeTable.new
a.amount = 9999.99
a.save!
#9999.99
a.amount
#9999.99
a.reload
a.amount
#9999.99
一切顺利
a = SomeTable.new
a.amount = 9999.999
a.save!
#9999.999
a.amount
#9999.999
a.reload
a.amount
#10000.00
如您所见,ruby(或 rails)对数字进行四舍五入。
谁能解释一下这是为什么? ...还是只有我?
最佳答案
接受的答案通常是正确的(使用 decimal 而不是 float 可以解决这个问题)。
然而,这里还有一个更深层次的问题。
mysql2 驱动程序未指定它希望 mysql 返回的精度,因此数据库返回的结果被截断了。
您可以通过将数量乘以 float 来强制 mysql 返回完整精度。
class SomeTable
default_scope -> { select("some_tables.*, amount * 1.0000000000000000 as amount")}
end
a = SomeTable.new
a.amount = 9999.999
a.save!
#9999.999
SomeTable.last.amount
#9999.999
SomeTable.unscoped.last.amount
#10000.00
关于mysql - 数据库级别的 Rails 舍入 float ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8494322/