2016-11-03 58 views
0

我正在使用psql(9.1.3)。我有一個表(比如說)postgres查詢不匹配負雙精度值

一個有兩列:

A_ID整數

customer_pay:雙精度

我的是這些值表。

a_id  | customer_pay |  

-------------------- + -------------- +

1733684 |  -264.6 | 
    1723382 |  -314.84 | 
    1728106 |  50.55 | 
    1741636 |  -264.6 | (4 rows) 

但是當我做

從A選擇a_id其中customer_pay = -264.6;

我得到了沒有什麼

我嘗試了所有可能的精度變化,如-264.60,-264.00等。 此查詢精確地爲+264.6。 我應該如何選擇具有負雙精度類型的值。

尋求幫助。

+0

我在Oracle中運行這個,看起來很好。 – sagi

+0

我試着把「」,「'等,在我的postgres中沒有任何作品。 – Amal

+0

如果您使用WHERE ROUND(customer_pay)= -264'。它工作嗎? – sagi

回答

0
select a_id 
from a 
where round(customer_pay::numeric, 2) = -264.6 

From the manual:

計算與數值得到確切的結果在可能的情況,例如加法,減法,乘法。但是,與整數類型或下一節中介紹的浮點類型相比,數值計算速度非常慢。

0

數據類型DOUBLE PRECISION是一個近似的,不精確的數據類型。我沒有看到任何理由,有人會使用它,而不是像DECIMAL這樣的確切類型。

使用大致的數據類型,無論使用哪種語言,都應該使用從不使用使用=。當比較不精確的數據值時,總是允許一些增量,例如, where customer_pay between -264.6000001 and 264.5999999。僅此一點應該解釋爲什麼我從來沒有使用它們;-)

+0

浮動在數字上的優點是對其的操作更快。 –

+0

@Clodoaldo Neto:他們?你甚至可以在使用PostgreSQL中的一個或另一個時測量差異嗎?如果有任何區別,它應該是可以忽略的。 –

+0

查看我的更新回答 –