Sql 当将小数部分的第一个数字

Sql 当将小数部分的第一个数字,sql,postgresql,Sql,Postgresql,如果将小数精度足够大的数字转换为实数,其中小数部分的第一个数字小于或等于1,则小数部分将被消除 -十进制精度被捕获 -3 x 10^5+0.1 选择300000.1::real 输出: 300000.1 -未捕获十进制精度 -3 x 10^6+0.1 选择3000000.1::real 输出: 3000000 -十进制精度被捕获 -3 x 10^6+0.2 选择3000000.2::real 输出: 3000000.2 我查看了Postgres文档,发现真正的数据类型是可变精度的,精度范围为6位

如果将小数精度足够大的数字转换为实数,其中小数部分的第一个数字小于或等于1,则小数部分将被消除

-十进制精度被捕获 -3 x 10^5+0.1 选择300000.1::real 输出: 300000.1 -未捕获十进制精度 -3 x 10^6+0.1 选择3000000.1::real 输出: 3000000 -十进制精度被捕获 -3 x 10^6+0.2 选择3000000.2::real 输出: 3000000.2
我查看了Postgres文档,发现真正的数据类型是可变精度的,精度范围为6位小数。我不确定为什么在第三个示例中捕获十进制精度,但在第二个示例中不捕获,因为数字的大小是相同的,只是更大的十进制部分。有人能解释一下吗?

这只是巧合


实数是以二进制形式存储的,因此,当您超过精度时,很有可能得出该值与预期的十进制数相差多远。

michotross您指的是哪些postgres文档,以及它将如何影响您的案例场景。请详细说明