postgres查询双精度列没有返回正确的结果

时间:2013-11-27 00:26:07

标签: postgresql double-precision

我的数据库中有一个名为“position”的双精度列。

如果我在该列中有一行值为0.564593301435407

我有一个查询,其中包含如下所示的WHERE语句:

WHERE "position" >= 0.564593301435407

(即,查询大于或等于完全相同的值)

它不会返回该列。

为什么会这样?

2 个答案:

答案 0 :(得分:4)

我无法重现您的确切问题:http://sqlfiddle.com/#!15/4cb15/6

然而,在15个有效数字处,你非常接近双精度的精度极限,并且小提示表明该值可能会四舍五入为0.56459330143541,其中数字不会。

我建议如果高精度比较是您的首选,那么numeric是数据类型的更好选择。

答案 1 :(得分:1)

我怀疑你患有Floating Point Accuracy Problems。具体来说,由于在二进制和十进制之间进行转换时出现舍入误差,因此比较浮点值是一种代码气味。