在Postgres中,混淆了将数字/实数/双精度转换为字符变化/文本

时间:2018-08-09 10:10:49

标签: postgresql

用于将数字/实数/双精度转换为字符变化/文本。

select (12.0/100)::Double Precision;# 0.12
select (12.0/100)::Double Precision::Text;# 0.119999999999999996
select 0.12::text ; # 0.12
select (12.0/100)::Numeric::Text ; #0.12000000000000000000

0.12::text是正确的,但是(12.0/100)::Numeric::Text(12.0/100)::Double Precision::Text的结果令人困惑。

1 个答案:

答案 0 :(得分:2)

这些值可能会使您感到困惑,但它们是正确的。

似乎您将参数extra_float_digits设置为3(或者您正在使用JDBC,它可以为您完成此操作)。

double precision是浮点类型,因此不精确。使用extra_float_digits的默认0值时,您不会注意到,因为该值被截断了,因此只显示了有效数字,但是如果您要求全精度,则会在所有的荣耀中看到舍入误差。 / p>

最后一条命令将显示许多零,因为您没有指定numeric(10,2)来限制小数位数,并且除法可能会产生很多零。如果您尝试使用*而不是/,将会明白我的意思。