繁体   English   中英

从 trunc() 函数返回的数字中删除尾随零

[英]Remove trailing zeroes from number returned by trunc() function

我正在尝试使用以下命令截断 PostgreSQL 中的数字:

SELECT trunc(31.71429,15); 

我有这个输出:

31.714290000000000

但在甲骨文我有这个:

31.71429

如何能有与 Oracle 相同的输出?

这是数字数据类型的行为。 最简单的解决方案 - 可能会丢失一些小精度被转换为双精度:

postgres=# SELECT trunc(31.71429,15);
┌────────────────────┐
│       trunc        │
╞════════════════════╡
│ 31.714290000000000 │
└────────────────────┘
(1 row)

postgres=# SELECT trunc(31.71429,15)::double precision;
┌──────────┐
│  trunc   │
╞══════════╡
│ 31.71429 │
└──────────┘
(1 row)

是正确的,您的“问题”在于显示- 文本表示。 因此,请使用to_char()根据您的喜好格式化数字。 您可以使用显示修饰符FM来抑制无关紧要的“0”:

SELECT to_char(trunc(31.71429,15), 'FM9999999999.999999999999999') 

产生所需的结果 - 作为显示text (逗号前最多 10 位和逗号后 15 位 - 如果可以添加更多):

'31.71429'

顺便说一句, 手册对此有点误导。 它说:

前缀填充模式(抑制前导零和填充空白)

但是“FM”也抑制了微不足道的尾随零。 我提交了一个文档错误报告。

正如另一个线程中所述,您现在可以使用从 PostgreSQL 13 开始的新的trim_scale(numeric)函数。

例如trim_scale(8.4100) → 8.41

根据 w3resource- http://www.w3resource.com/PostgreSQL/trunc-function.php

PostgreSQL trunc() 函数用于将数字截断到特定的小数位。 如果未提供小数位,则它会向零 (0) 截断。

示例 1:PostgreSQL TRUNC() 函数

SELECT TRUNC(123.4562) 作为“截断”;
输出:截断
'---------
123
(1 行)

示例 2:PostgreSQL TRUNC() 函数

SELECT TRUNC(67.4562,1) AS "截断至 1 位小数";
输出:截断
'---------
123.4
(1 行)

示例 3:PostgreSQL TRUNC() 函数

SELECT TRUNC(67.4562,2) AS "截断至 2 位小数";
输出:截断
'---------
123.45
(1 行)

因此,逗号后的第二个值是小数点后显示的值。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM