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

时间:2017-08-17 16:20:59

标签: postgresql formatting plpgsql

我试图用以下内容截断PostgreSQL中的数字:

SELECT trunc(31.71429,15); 

我有这个输出:

31.714290000000000

但是在Oracle中我有这个:

31.71429

如何获得与Oracle相同的输出?

4 个答案:

答案 0 :(得分:1)

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

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

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

答案 1 :(得分:1)

是正确的,您的“问题”是 display - 文本表示。因此,请使用to_char()根据自己的喜好设置数字格式。您可以使用display modifier FM来抑制无关紧要的'0':

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

产生所需的结果 - 显示text(逗号之前最多10位,逗号之后最多15位) - 如果可以更多则添加更多数字:

'31.71429'
BTW,the manual对此有点误导。它说:

  

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

但'FM'也会抑制无效的尾随零。 I filed a documentation bug report.

答案 2 :(得分:1)

如其他thread所述,您现在可以使用从PostgreSQL 13开始的新trim_scale(numeric)函数。

例如trim_scale(8.4100)→8.41

答案 3 :(得分:0)

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

  

PostgreSQL trunc()函数用于将数字截断为a   特定小数位。如果没有提供小数位   截断为零(0)。

示例1:PostgreSQL TRUNC()函数

  

SELECT TRUNC(123.4562)AS“Truncate”;
输出:   截断
  “---------
  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排)

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