postgres查询不匹配负双精度值

时间:2016-11-03 10:44:04

标签: mysql postgresql floating-point numeric

我使用psql(9.1.3)。我有一张桌子(比如说)A

A有两列:

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。 如何选择负双精度类型的值。

寻求帮助。

2 个答案:

答案 0 :(得分:0)

数据类型DOUBLE PRECISION是一种近似的,不精确的数据类型。我认为没有理由,有人会使用它而不是像DECIMAL这样的确切类型。

使用近似数据类型,无论使用何种语言,您都应该永远使用=。比较不精确的数据值时,始终允许某些增量,例如where customer_pay between -264.6000001 and 264.5999999。仅这一点就可以解释为什么我永远不会使用它们; - )

答案 1 :(得分:0)

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

From the manual:

  

使用数值计算可能会产生精确的结果,例如:加法,减法,乘法。但是,与整数类型或下一节中描述的浮点类型相比,对数值的计算速度非常慢。