选择十进制形式的浮点数

2023-12-02

我在 PostgreSQL 表中有一个小数字:

test=# CREATE TABLE test (r real);
CREATE TABLE
test=# INSERT INTO test VALUES (0.00000000000000000000000000000000000000000009);
INSERT 0 1

当我运行以下查询时,它返回的数字为8.96831e-44:

test=# SELECT * FROM test;
      r      
-------------
 8.96831e-44
(1 row)

我怎样才能显示其中的价值psql其十进制形式 (0.00000000000000000000000000000000000000000009)而不是科学记数法?我会很高兴0.0000000000000000000000000000000000000000000896831也。不幸的是,我无法更改表格,而且我并不真正关心精度的损失。

(我玩过to_char有一段时间没有成功。)


Postgres 中的真实值是浮点数据类型,存储在 4 个字节上,即 32 位。

你的价值,

0.00000000000000000000000000000000000000000009

无法精确表示为 32 位 IEEE 754 浮点数。您可以检查确切的值在这个计算器中

You cold try and use double precision (64bits) to store it, according to the calculator, that seems to be an exact representation. NOT TRUE Patricia showed that it was just the calculator rounding the value, even though explicitly asking it not to... Double would mean a bit more precision, but still no exact value, as this number is not representable using finite number of binary digits. (Thanks, Patricia, a lesson learnt (again): don't believe what you see on the Intertubez)

在正常情况下,您应该使用 NUMERIC(精度,小数位数)格式,它可以精确地存储数字以获取正确的值。

However,您要存储的值的范围似乎大于 postgres 允许的精确十进制表示(似乎是 30)。如果您不想进行计算,只需存储它们(我承认这不是很常见的情况),您可以尝试将它们存储为字符串...(但这很丑陋...)

EDIT

这个 to_char 问题似乎是已知错误...

Quote:

我对此的第一反应是 float8 值没有 57 位数字 的精度。如果您希望该格式字符串执行某些操作 有用,您应该将其应用于数字列而不是双精度列 精度一.

我们可能可以整合一些东西来使这个特殊案例发挥作用 就像你期待的那样,但总会有相似的 由于精度不存在而无法工作的情况。

快速浏览一下代码,您会得到“0”的原因。是它是 15 位数字后四舍五入,以确保不会打印垃圾。或许 对于值非常小的情况,它可能会更聪明一些 比1,但这不是一个简单的改变。

(从这里)

然而,我认为这是无可辩解的。恕我直言,双精度(准确地说是 IEEE754 64 位浮点)将始终有 ~15有效小数位,如果该值适合该类型...

推荐阅读:

  • 每个计算机科学家都应该了解的浮点运算知识
  • Postgres 数字类型
  • BUG #6217:to_char() 对于非常小的浮点值给出错误的输出
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

选择十进制形式的浮点数 的相关文章

随机推荐

  • 在 Java Swing 应用程序中创建在线帮助 - 使用 pdf 用户文档

    我正在尝试将一些用户文档链接到我的 Java Swing 应用程序 用户文档是 pdf 格式 我希望能够单击应用程序中的按钮 打开某种 pdf 渲染器来显示我的 userdoc pdf 我不想使用运行时执行命令 我尝试了以下方法 但没有取得
  • 如何在 JSP 中将值插入到 derby 数据库中?

    我在 JSP 中创建了一个表单来将数据插入到 derby 中的数据库中 但它不起作用 数据库名称是 CUSTOMER 表格 ID int CNAME varchar ADDRESS varchar PHONENUMBER varchar c
  • 无法监视 HttpSession / Mockito

    我想要部分嘲笑Httpsession但为此我需要监视它而不是嘲笑它 并且如果没有已经被嘲笑的请求对象 我就无法获得它的接口 请帮忙 换句话说 我怎样才能得到一个对象HttpSession没有HttpServletRequest object
  • 将 Google 图表另存为 pdf

    我正在尝试将饼图另存为 pdf 文件 如下所示http keepcoding ehsanabbasi com php convert google chart to png and pdf 在 php chartsrc 中包含 javasc
  • 无法在 SD 卡上写入文件

    我试图在 SD 卡上写入照片 但没有成功 我已经获得了在可移动存储中写入的权限 并且 SD 卡已安装 另外 我检查了 SD 卡的路径是否存在 并且得到了肯定的结果 失败的地方是当我使用mkdir 功能 它返回 false 并且没有创建文件
  • java中的selenium异常(org.openqa.selenium.remote.UnreachableBrowserException)

    我知道有很多线程正在运行 但没有一个线程可以解决这个问题 我正在尝试使用 selenum 获取 aspx 页面 但它在这行代码处抛出 UnreachableBrowserExceptionWebDriver driver new Chrom
  • 如何为uuid设置cookie

    我有一个网站 每次加载 刷新页面时都会生成一个 uuid 我想使用 cookie 使某个值在一段时间内保持不变 有谁知道可以帮助我的脚本吗 不确定您为什么要求脚本 或者这里的问题是什么 要设置 cookie 只需使用 if empty CO
  • Angular 2如何加载具有子依赖项的第3方供应商节点模块

    正在加载单节点模块在 Angular 2 中角度 cliwiki 中对引导项目进行了很好的描述 只是好奇 如何在使用 angular cli 引导的项目中很好地加载更复杂的节点模块 例如 angular2 apollo 依赖于几个子依赖项
  • 如何使用 AVFoundation 设置逐帧生成的视频的方向?

    我正在编写一个 iPhone 应用程序 它从相机获取视频 通过一些 OpenGL 着色器代码运行它 然后使用以下命令将输出写入视频文件AVFoundation 该应用程序以横向运行 或者 因此所有录制的视频都应该是横向的 我在开始录制之前使
  • 在 Redhat 上从 C++ 解压文件:system() 的替代方法

    我需要在运行 C 程序时解压缩文件 如中所述在 RedHat 机器上执行 C 代码之前等待解压完成 为此 我目前正在执行以下操作 system unzip usr bin File ZippedFile gz d usr bin File
  • 仅对数字列求和并将值除以总计

    我在对数据框进行一些计算时遇到问题 这是我的 DF 还有更多行和列 我想做的是 步骤 1 对于每个月 我想对资产列进行求和 例如 所有 asset Jan 2018 并输出为 DF 步骤 2 然后 对于每个公司 我想将每月的资产除以该月的总
  • C#:为什么要签署程序集?

    在我接管的一些 C 代码中 在 Visual Studio 2005 中 我注意到程序集都使用相同的签名 snk file 为什么前一作者会以这种方式签署程序集 签署程序集是否必要以及什么 不签字会不会有错 有什么缺点 签署程序集 是否会导
  • JavaScript 中如何四舍五入到小数点后一位?

    你能将 JavaScript 中的数字四舍五入到小数点后一个字符 正确四舍五入 吗 我尝试了 10 round 10 但它在 int 末尾留下了两位小数 Math round num 10 10有效 这是一个例子 var number 12
  • 使用 numpy.frompyfunc 将广播添加到带参数的 python 函数

    从像这样的数组db 这将大约是 1e6 300 and a mask 1 0 1 向量 我将目标定义为第一列中的 1 我想创建一个out由其中相应行组成的向量db匹配mask and target 1 其他地方都是零 db np array
  • google api 机器学习 我可以使用 API KEY 吗?

    出于学习目的 我尝试使用机器学习 ml API https cloud google com ml engine reference rest v1 projects models list 我无法确定是否可以使用 API KEY 而不是
  • 限制表中数据范围的声明性方法

    我想学习一种声明性方法来解决我不时遇到的与独占日期范围相关的数据约束问题 下面是一个简化的示例 我有物品和这些物品的价格 我希望价格的有效日期范围是相互排斥的 没有重叠 据我了解 Oracle 的情况 用户定义的函数不符合使用条件CONST
  • 从 C 到 Java 传递指针变成 NULL

    我正在开发一个适用于 x86 的 Android 应用程序 需要与 C 进行一些集成 我一直在使用 swig JNI 来实现这一点 并且大部分情况都运行顺利 然而 指针给了我一些错误 我的问题是 我能够成功引用模拟器 ARM 中的变量地址
  • 来自索引 URL 的 Angular2 查询参数

    我正在尝试从 Angular2 组件中的 url 获取查询参数 版本 angular2 npm 电子邮件受保护 我正在尝试提取组件中的 id 查询参数并显示它 这是请求 本地主机 8080 index html id 1 boot ts i
  • Oracle SQL 比较日期

    SQL gt select from porder OID BILL ODATE 10 200 06 OCT 13 4 39878 05 OCT 13 5 430000 05 OCT 13 11 427 06 OCT 13 12 700 0
  • 选择十进制形式的浮点数

    我在 PostgreSQL 表中有一个小数字 test CREATE TABLE test r real CREATE TABLE test INSERT INTO test VALUES 0 00000000000000000000000