sql - Postgres 在将小数部分中的第一个数字 <= 1 的大浮点数转换为实际 dtype 时消除了小数精度
问题描述
如果您将足够大的具有小数精度的数字转换为实数,其中小数部分中的第一个数字小于或等于 1,则小数部分将被消除。
-- decimal precision is captured
-- 3 x 10^5 + 0.1
select 300000.1::real
OUTPUT:
300000.1
-- decimal precision is not captured
-- 3 x 10^6 + 0.1
select 3000000.1::real
OUTPUT:
3000000
-- decimal precision is captured
-- 3 x 10^6 + 0.2
select 3000000.2::real
OUTPUT:
3000000.2
我检查了 Postgres 文档,发现真正的dtype 是“可变精度,不精确”,范围为“6 个十进制数字精度”。我不确定为什么在第三个示例中捕获小数精度而不是第二个示例,因为数字的大小是相同的,只是一个更大的小数部分。有人可以解释一下吗?
解决方案
这只是一个巧合。
real
以二进制形式存储,因此当您超过精度时,该值与预期的十进制数相差多远取决于抽签的运气。
推荐阅读
- algorithm - 我们可以使用最长公共子序列算法(LCS)进行搜索吗?
- node.js - 发生数据库更改时的 ReactJS/Node 项目更新小部件
- html - Bootstrap 4 无法将新 CSS 应用于选项卡项
- python - 具有多个数据库的 sqlalchemy 未知数据库烧瓶
- java - 我被困在创建一个 if 语句来检查两个变量
- jenkins - 如何使用 Jenkins 仅将修改文本文件传输到 App Server
- javascript - 当我点击发送按钮时,表单验证被绕过
- python - 如何在 MRI 图像中仅提取中心的大脑部分?
- linux - 如何从终端上传文件到 hdfs 网页?
- reactjs - Jest 和 React 测试库,如何测试元素是否隐藏?