0
我有一个应用程序运行的Rails 4.2与此迁移为什么Rails在使用不同的数据库时返回不同的float值?
create_table "nutrient_amounts", force: :cascade do |t|
t.integer "nutrient_id", limit: 4
t.integer "food_id", limit: 4
t.float "amount", limit: 24
end
运行的同时使用SQLite和MySQL的该次迁移后,我添加数据一行0.8
为amount
他们两个。
当我访问量在控制台中使用SQLite作为数据库:
> NutrientAmount.find(1).amount
=> 0.8
当我访问量在控制台与MySQL作为数据库:
> NutrientAmount.find(1).amount
=> 0.800000011920929
如果我在打开的MySQL终端并运行
mysql> SELECT amount FROM nutrient_amounts WHERE id = 1;
+--------+
| amount |
+--------+
| 0.8 |
+--------+
我很困惑这里。这是预期的行为?使用MySQL时,Rails应该不会返回0.8
?
这并不能真正解决您的问题,它只是将它推向别处。考虑到这种行为只是处理浮点值的一部分,你必须迟早面对它。 –
那么你在暗示什么?所有代码都考虑到数据库中可能不会返回的浮点值四舍五入? –
我建议所有处理浮点值的代码(不管它们来自哪里)都需要理解它们是如何工作的,以及它们是如何运算的。你可能想要在数据库中使用'decimal'或'numeric',在Ruby中使用'BigDecimal',或者把所有东西都切换成整数(如果你能摆脱它的话)。 –