【发布时间】:2015-03-03 08:45:57
【问题描述】:
我正在试验 mysql,并使用GRATEST() 函数进行查询以比较两个不同的字段。
我的查询如下所示:
SELECT
id,
float1,
float2,
GREATEST(
IFNULL(float1, 0),
IFNULL(float2, 0)
) AS gtst
FROM `test`
Float1 和 2 是 UNSIGNED FLOAT,默认值为 NULL。 服务器版本:5.1.73-1-log,客户端:5.0.8-dev,PHP扩展:mysqli。
运行上面的命令给了我这样奇怪的值:
| id | float1 | float2 | gtst |
|-----|--------|--------|------------------|
| 872 | 348.5 | 348.58 | 348.579986572266 |
我知道 MySQL 处理浮点值的方式很奇怪,正如 this article 中所述,但我不清楚这些额外数字来自哪里?
单个比较不应该改变提供的值,对吧?这里没有可能出现舍入误差的数学方程式,那么可能出了什么问题?
提前致谢!
【问题讨论】:
-
嗯,这对你来说是浮动的。尝试给它一个精度,更好的主意,不要在你真正想要的是十进制的地方使用浮点数!也就是说,这个结果没有什么不准确的!
-
看起来 MySQL 将您的
FLOAT转换为DOUBLE,由于这种类型的精度不同,最后会产生一些垃圾。 -
@PetSerAl 嗯,现在说得通了。感谢您的回答!