我会尝试解释发生在我身上的事情而不会粘贴我的每一段代码,因为它很多。
如果我单独运行此查询,则返回6.0(预期行为)
select distancia_euclediana_para_imagenes(vector_cuadrante1,
vector_cuadrante2,
vector_cuadrante3,
vector_cuadrante4,
ARRAY[SQRT(8),SQRT(8)],
ARRAY[SQRT(8),SQRT(8)],
ARRAY[SQRT(8),SQRT(8)],
ARRAY[SQRT(8),SQRT(8)])
from imagen,pivotes
where id=id_imagen and indice_pivote=2
如果我运行这个其他查询,它返回2(再次是预期的行为)
with distancia_a_pivote(distancia) as
(select distancia_euclediana_para_imagenes(vector_cuadrante1,
vector_cuadrante2,
vector_cuadrante3,
vector_cuadrante4,
ARRAY[SQRT(8),SQRT(8)],
ARRAY[SQRT(8),SQRT(8)],
ARRAY[SQRT(8),SQRT(8)],
ARRAY[SQRT(8),SQRT(8)])
from imagen,pivotes
where id=id_imagen and indice_pivote=2)
select id from imagen, indice, distancia_a_pivote d
where id=id_imagen and
fqa[2]>= 6-1 and
fqa[2]<= d.distancia+1;
然而,通过这个小小的改变它停止工作并且什么都不返回
with distancia_a_pivote(distancia) as
(select distancia_euclediana_para_imagenes(vector_cuadrante1,
vector_cuadrante2,
vector_cuadrante3,
vector_cuadrante4,
ARRAY[SQRT(8),SQRT(8)],
ARRAY[SQRT(8),SQRT(8)],
ARRAY[SQRT(8),SQRT(8)],
ARRAY[SQRT(8),SQRT(8)])
from imagen,pivotes
where id=id_imagen and indice_pivote=2)
select id from imagen, indice, distancia_a_pivote d
where id=id_imagen and
fqa[2]>= d.distancia-1 and
fqa[2]<= d.distancia+1;
如果你能帮助我,我将不胜感激,因为我不知道是什么原因引起了这个问题。除了我一直在TDD风格的编码,所以我有测试来证明正确的行为,我很漂亮它会起作用
由于
答案 0 :(得分:1)
您说fqa[2]
是整数5而d.distancia
是浮点值6.0。这意味着你最终会看到这个:
5 >= 6.0 - 1
那个6.0可能不准确,所以6.0 - 1
可能会出现小于5.0的阴影,你的比较会失败。一种解决方案是添加一点摆动空间来解决通常的浮点问题:
fqa[2] >= d.distancia - 1.00001 and
fqa[2] <= d.distancia + 1.00001
0.00001只是一个例子,您需要查看您的情况,看看您应该允许多少额外费用。添加ceil
and floor
调用可能是另一种选择,因为它们可以让您更好地控制浮点到整数转换。