2015-03-03 59 views
0

我正在试验mysql,并且使用GRATEST()函数作了一个查询来比较两个不同的字段。在float类型值上使用GREATEST()会导致不准确的结果

我的查询看起来是这样的:

SELECT 
    id, 
    float1, 
    float2, 
    GREATEST(
    IFNULL(float1, 0), 
    IFNULL(float2, 0) 
) AS gtst 
FROM `test` 

Float1和2是无符号上浮,用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

嗯,这是浮动的您。尝试给它一个精确的,更好的主意,不要使用浮点数,你真正想要的是小数点!也就是说,这个结果没有任何不准确的地方! – Strawberry 2015-03-03 08:51:19

+1

看起来像MySQL将'FLOAT'强制转换为'DOUBLE',并且由于这种类型的精度不同,最终会产生一些垃圾。 – PetSerAl 2015-03-07 16:21:48

+0

@PetSerAl Hm,现在有道理。感谢你的回答! – 2015-03-16 15:15:06

回答

0

它好像你已经宣布float1和FLOAT2为float数据类型,这通常需要12个分数点像10.123456789101化妆用的

Round(10.123456789101,2); 

显示2倍额外的数字为,10.12

相关问题