在浮点类型值上使用 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 处理浮点值的方式很奇怪,如 this article 中所述,但我不清楚这些额外的数字是从哪里来的?
单次比较不应该改变提供的值,对吗?这里没有可能会产生舍入误差的数学方程式,所以可能有什么问题?
提前致谢!
您似乎已将 float1 和 float2 声明为 float 数据类型,通常需要 12 个小数点,例如 10.123456789101 利用
Round(10.123456789101,2);
将 2 个额外数字显示为 10.12
我正在试验 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 中所述,但我不清楚这些额外的数字是从哪里来的?
单次比较不应该改变提供的值,对吗?这里没有可能会产生舍入误差的数学方程式,所以可能有什么问题?
提前致谢!
您似乎已将 float1 和 float2 声明为 float 数据类型,通常需要 12 个小数点,例如 10.123456789101 利用
Round(10.123456789101,2);
将 2 个额外数字显示为 10.12