提问人:Gergely Lukacsy 提问时间:3/3/2015 最后编辑:Isaac BennetchGergely Lukacsy 更新时间:3/7/2015 访问量:69
对浮点类型值使用 GREATEST() 会给出不准确的结果
Using GREATEST() on float type values gives inaccurate results
问:
我正在试验 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处理浮点值很奇怪,正如本文所述,但我不清楚这些额外的数字来自哪里?
单个比较不应该改变提供的值,对吧?这里没有舍入误差可能起作用的数学方程式,那么可能出了什么问题呢?
提前致谢!
答:
0赞
user2042292
3/3/2015
#1
似乎您已将 float1 和 float2 声明为 float 数据类型,它通常需要 12 个小数点,例如 10.123456789101 使用
Round(10.123456789101,2);
将 2 位额外数字显示为 10.12
评论
FLOAT
DOUBLE