2016-11-03 34 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

查看我的更新回答 –