用于将数字/实数/双精度转换为字符变化/文本。
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
的结果令人困惑。
答案 0 :(得分:2)
这些值可能会使您感到困惑,但它们是正确的。
似乎您将参数extra_float_digits
设置为3(或者您正在使用JDBC,它可以为您完成此操作)。
double precision
是浮点类型,因此不精确。使用extra_float_digits
的默认0值时,您不会注意到,因为该值被截断了,因此只显示了有效数字,但是如果您要求全精度,则会在所有的荣耀中看到舍入误差。 / p>
最后一条命令将显示许多零,因为您没有指定numeric(10,2)
来限制小数位数,并且除法可能会产生很多零。如果您尝试使用*
而不是/
,将会明白我的意思。