gpt4 book ai didi

mysql - 数据库级别的 Rails 舍入 float

转载 作者:可可西里 更新时间:2023-11-01 07:59:59 26 4
gpt4 key购买 nike

我有一个带有浮点列的表(我正在使用 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/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com