Bom, vou tentar fugir um pouco do PostgreSQL e ir para o mundo do C. No C é comun compararmos igualdade de float/double da seguinte forma:
#define EPS 0.000000001 // precisão if (valor >= 355.55 - EPS && valor <= 355.55 + EPS) { // valor igual } else { // valor diferente } Explicando, o mundo binário tem problemas de dizimas periódicas assim como no mundo decimal, mas as dizimas são causadas por números (frações) diferentes, com isso a conversão binário -> decimal e o inverso pode gerar erros (geralmente pequenos), por isso, quando compara-se igualdade coloca-se uma margem de erro, geralmente chamada EPSILON (a cte EPS acima). Agora, voltando ao PostgreSQL, não sei "exatamente" se ele converte o numeric pra binário, mas parece que sim (já que disseram que é gravado como float), então deixo mais algumas opções para que tente: SELECT * FROM tabela WHERE valor BETWEEN 355.55 - 0.000000001 AND 355.55 + 0.000000001 e, só por desencargo: SELECT * FROM tabela WHERE valor = 355.55::numeric(14, 4) E segundo é só porque não sei se ele está convertendo o valor pra float ou o 355.55 pra numeric na verificação, assim temos certeza. Atenciosamente, -- Matheus de Oliveira
_______________________________________________ pgbr-geral mailing list pgbr-geral@listas.postgresql.org.br https://listas.postgresql.org.br/cgi-bin/mailman/listinfo/pgbr-geral