簡體   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