2017-01-05 67 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)