在浮点类型值上使用 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