2017-01-05 59 views
0

我对MySQL服务器上运行的查询有疑问(v5.5.50-0 + deb8u1)。MySQL在查询中发生错误,错误的结果

SELECT 12 - (SELECT qty FROM Table WHERE id = 5213) AS Amount 

所以金额值是12 - 8,5500000000000007 = 3.4499999999999993

但是,如果我运行查询:

SELECT qty FROM Table WHERE id = 5213 

返回8.55这是写在记录正确的号码,所以我期待第一个雀儿返回3.45。

表“表”中的“数量”列是一个DOUBLE。

它怎么可能?我怎样才能从查询中得到正确的答案? 在此先感谢

+2

欢迎来到浮点运算的世界。 –

回答

2

那么这就是just the way floating numbers are

浮点数有时会引起混淆,因为它们是近似值而不是作为精确值存储。在SQL语句中编写的浮点值 可能与内部表示的值 不同。

该声明对许多编程语言也适用。有些数字甚至没有确切的表示。下面是来自python manual

的问题是比较容易理解,首先以10为底数考虑 分数1/3的东西。可以近似地认为作为基础10分:

0.3或更好,

0.33,或者更好,

0.333等等。无论您愿意写多少位数字,结果都不会完全是1/3,但会越来越接近1/3。

以同样的方式,无论您愿意使用多少个基本2位数,小数值0.1都不能完全表示为基数2 分数。在基地2个,1/10是无限重复的部分

因此,在短期通常做的是float1 = float2类型的比较是一个坏主意,但大家一直忘记它。

0

您可以将'qty'列定义为十进制(10,2)