我有一个关于我在MySQL服务器上运行的查询的问题(v5.5.50-0 + deb8u1)。
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,这是记录中写入的正确数字,所以我期待第一个querty返回3.45。
"数量"表格中的列"表"是双重的。
怎么可能?如何从查询中获得正确的答案? 提前谢谢
答案 0 :(得分: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
类型的比较是一个坏主意,但每个人都会忘记它。
答案 1 :(得分:1)
您可以将'qty'列定义为十进制(10,2)