【问题标题】:Postgres - always display digits after decimalPostgres - 始终显示小数点后的数字
【发布时间】:2023-11-08 02:00:01
【问题描述】:

一列的值为 0.039

我总是希望它显示为 0.0390

我们如何在 Postgres 中实现这一点?

【问题讨论】:

标签: sql postgresql


【解决方案1】:

可以使用to_char(),就像@Joachim 提供的一样。但是,根据实际要求,这可能有一些注意事项。

对于初学者,您可能希望也可能不希望将template pattern modifier FM 添加到...

抑制尾随零和填充空白

四舍五入、悬空小数点、最大显示位数等也存在潜在问题。

我建议改为转换为numeric(precision, scale)Scale 在您的情况下为 4,而 precision 是您允许的最大位数。如果您没有特别限制,请使用大数字。喜欢:

SELECT nr::numeric(30,4)

这有一个额外的好处,即结果仍然是 数字数据类型 - 与返回 textto_char() 相反 - 所以使用 ORDER BY 进行排序可以按预期工作。考虑:

SELECT nr
     , nr::numeric(30,4) AS cast
     , to_char(nr, 'FM9999999990.9999') AS to_char0
     , to_char(nr, '0.9999') AS to_char1
     , to_char(nr, '0.0000') AS to_char2
     , to_char(nr, 'FM0.9999') AS to_char3
     , to_char(nr, 'FM0.0000') AS to_char4
FROM  (
   VALUES
  (1, numeric '123')
, (2, 1.2)
, (3, 0.00000)
, (4,-0.039)
, (5, 0.039)
, (6, 0.0390)
, (7, 0.039000)
, (8, 0.0391234)
,(9, 123456789.039123456789)
,(10, 123456789.039123456789123456789)
   ) t(id, nr)
ORDER  BY id;
天然橡胶 |演员 | to_char0 | to_char1 | to_char2 | to_char3 | to_char4 ------------------------------: | -------------: | :------------- | :------- | :------- | :------- | :-------- 123 | 123.0000 | 123. | #.#### | #.#### | #.#### | #.#### 1.2 | 1.2000 | 1.2 | 1.2000 | 1.2000 | 1.2 | 1.2000 0.00000 | 0.0000 | 0。| 0.0000 | 0.0000 | 0。| 0.0000 -0.039 | -0.0390 | -0.039 | -0.0390 | -0.0390 | -0.039 | -0.0390 0.039 | 0.0390 | 0.039 | 0.0390 | 0.0390 | 0.039 | 0.0390 0.0390 | 0.0390 | 0.039 | 0.0390 | 0.0390 | 0.039 | 0.0390 0.039000 | 0.0390 | 0.039 | 0.0390 | 0.0390 | 0.039 | 0.0390 0.0391234 | 0.0391 | 0.0391 | 0.0391 | 0.0391 | 0.0391 | 0.0391 123456789.039123456789 | 123456789.0391 | 123456789.0391 | #.#### | #.#### | #.#### | #.#### 123456789.039123456789123456789 | 123456789.0391 | 123456789.0391 | #.#### | #.#### | #.#### | #.####

db小提琴here

相关:

【讨论】: