postgres 查询不匹配负双精度值
postgres query not matching negative double precision values
我正在使用 psql (9.1.3)。我有一个table(比如说)A
A 有两列:
a_id : 整数
customer_pay : 双精度
I have these values in the table.
a_id | customer_pay |
--------------------+--------------+
1733684 | -264.6 |
1723382 | -314.84 |
1728106 | 50.55 |
1741636 | -264.6 | (4 rows)
但是当我这样做的时候
select a_id from A where customer_pay = -264.6;
我什么都没有。
我尝试了所有可能的精度变化,如 -264.60、-264.00 等。
此查询适用于 +264.6。
我应该如何处理负双精度类型的 select 值。
感谢您的帮助。
数据类型DOUBLE PRECISION
是一种近似的、不精确的数据类型。我看不出有什么理由,有人会用它来代替 DECIMAL
.
这样的确切类型
对于近似数据类型,无论使用何种语言,您都应该永远不要使用=
。比较不精确的数据值时,始终允许有一些差异,例如where customer_pay between -264.6000001 and 264.5999999
。仅此一点就可以解释为什么我从不使用它们 ;-)
select a_id
from a
where round(customer_pay::numeric, 2) = -264.6
Calculations with numeric values yield exact results where possible, e.g. addition, subtraction, multiplication. However, calculations on numeric values are very slow compared to the integer types, or to the floating-point types described in the next section.
我正在使用 psql (9.1.3)。我有一个table(比如说)A
A 有两列:
a_id : 整数
customer_pay : 双精度
I have these values in the table.
a_id | customer_pay |
--------------------+--------------+
1733684 | -264.6 | 1723382 | -314.84 | 1728106 | 50.55 | 1741636 | -264.6 | (4 rows)
但是当我这样做的时候
select a_id from A where customer_pay = -264.6;
我什么都没有。
我尝试了所有可能的精度变化,如 -264.60、-264.00 等。 此查询适用于 +264.6。 我应该如何处理负双精度类型的 select 值。
感谢您的帮助。
数据类型DOUBLE PRECISION
是一种近似的、不精确的数据类型。我看不出有什么理由,有人会用它来代替 DECIMAL
.
对于近似数据类型,无论使用何种语言,您都应该永远不要使用=
。比较不精确的数据值时,始终允许有一些差异,例如where customer_pay between -264.6000001 and 264.5999999
。仅此一点就可以解释为什么我从不使用它们 ;-)
select a_id
from a
where round(customer_pay::numeric, 2) = -264.6
Calculations with numeric values yield exact results where possible, e.g. addition, subtraction, multiplication. However, calculations on numeric values are very slow compared to the integer types, or to the floating-point types described in the next section.