我的数据库中有一个名为“position”的双精度列。
如果我在该列中有一行值为0.564593301435407
我有一个查询,其中包含如下所示的WHERE语句:
WHERE "position" >= 0.564593301435407
(即,查询大于或等于完全相同的值)
它不会返回该列。
为什么会这样?
答案 0 :(得分:4)
我无法重现您的确切问题:http://sqlfiddle.com/#!15/4cb15/6
然而,在15个有效数字处,你非常接近双精度的精度极限,并且小提示表明该值可能会四舍五入为0.56459330143541,其中数字不会。
我建议如果高精度比较是您的首选,那么numeric
是数据类型的更好选择。
答案 1 :(得分:1)
我怀疑你患有Floating Point Accuracy Problems。具体来说,由于在二进制和十进制之间进行转换时出现舍入误差,因此比较浮点值是一种代码气味。