UPDATE some_table SET some_float_field=1919.987 WHERE id=123
SELECT * FROM some_table WHERE id=123
其中 some_float_field 是定义为“float”(没有任何特定大小值)的字段。
预期结果值为 1919.987;相反,它四舍五入为 1919.99
为什么? 32 位(单精度) float 具有足够的精度来正确存储它!
最佳答案
当您运行查询时:
SELECT * FROM some_table WHERE id = 123
您依靠用户界面来格式化 float 。您正在使用的界面使用两个字符而不是更多。毕竟,没有关于“正确”数字的信息可以显示。
您可以通过将数字格式化为字符串或小数来说服界面显示正确的数字。例如:
select format(some_float_field, 3)
会将其转换为具有三位小数的字符串。一个警告:它还会添加您可能不想要的逗号。这也应该有效:
select cast(some_float_field as decimal(8, 3))
请注意,您可以通过执行以下操作轻松验证数据是否正确:
select *
from some_table
where some_float_field between 1919.987 - 0.0001 and 1919.987 + 0.0001;
请注意,您不想对浮点值使用 =
,但您已经了解这一点。
关于mysql - 为什么 MySQL round floats 比预期的要多?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23120584/