Vi algumas perguntas relacionadas, mas nenhuma deu uma resposta satisfatória para isso.
select
((5999.999999999999)::numeric) as num,
((5999.999999999999)::float8) as f64,
((5999.999999999999)::float8)::numeric as f64_to_num,
((5999.999999999999)::numeric)::float8 as num_to_f64;
num | f64 | f64_to_num | num_to_f64
-------------------+-------------------+------------+-------------------
5999.999999999999 | 5999.999999999999 | 6000 | 5999.999999999999
(1 row)
Isso é surpreendentemente inconsistente, porque um número que é representado no mesmo lugar em numeric e float8, eu não esperaria que ele fosse arredondado para cima ao converter.
O que está errado?