2015-12-11 114 views
0

我有一個表名爲AMOUNT double precision的字段,還有一個返回另一個數據的函數double precision。什麼情況是,如果我做PostgreSQL函數的返回

select (VALUE - function()) 

其中兩個VALUE以及函數的結果是相等的,結果仍然是2.27373675443232e-013

我覺得很奇怪,我不知道該怎麼辦,因爲我進行了一些測試用的轉換和舍入並沒有什麼

任何人有任何想法可能怎麼回事?

回答

2

double precision是有損數據類型。 的十進制表示只是內部二進制值的近似值。使用浮點數計算時,您會發現這種「意外」不匹配。

您可以使用像numeric這樣的無損類型來避免這種情況。 (並可能捨入到合理的小數位數)。

首先閱讀Postgres manual on numeric data types並至少one of the many articles out there about floating-point arithmetic

+0

謝謝你的幫助Ervin。我會嘗試改變雙數字和測試的類型。 –