在float类型值上使用GREATEST()会得到不准确的结果

时间:2015-03-03 08:45:57

标签: mysql floating-accuracy

我正在尝试使用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中所述,但我不清楚这些额外数字来自何处?

单个比较不应改变提供的值,对吧?这里没有数学方程可以发挥舍入误差,那么可能出现什么问题呢?

提前致谢!

1 个答案:

答案 0 :(得分:0)

看起来你已经将float1和float2声明为float数据类型,这通常需要12个小数点,如10.123456789101使用

Round(10.123456789101,2); 

显示2个额外数字,10.12