[英]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.