我想在PostgreSQL的截断数字用:删除尾随零的TRUNC()函数返回
SELECT trunc(31.71429,15);
我有这样的输出:
31.714290000000000
但在甲骨文我有这样的:
31.71429
怎么能有和Oracle一样的输出?
我想在PostgreSQL的截断数字用:删除尾随零的TRUNC()函数返回
SELECT trunc(31.71429,15);
我有这样的输出:
31.714290000000000
但在甲骨文我有这样的:
31.71429
怎么能有和Oracle一样的输出?
作为每w3resource- http://www.w3resource.com/PostgreSQL/trunc-function.php
PostgreSQL的TRUNC()函数是用来截断号码到 特定小数位。如果没有提供小数位数,则向0(0)截取 。
实施例1:的PostgreSQL TRUNC()函数
SELECT TRUNC(123.4562)AS “截断”;
输出: 截断
“---------
(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行)
所以,逗号后的第二值是值小数点后显示。
我认为你错过了问题的重点。如果没有链接到源代码,你不应该粘贴显然不是你自己的图片 - 或者如果图片不是免费的,或者你没有拥有必要的权利,则不应该粘贴图片。 –
@ Erwin:根据建议编辑我的答案。 – user3152549
好,主要问题已修复。我仍然认为这个问题是要求别的,而不是你回答的问题。 'trunc()'的基本功能是清楚的,在结果的'numeric'值的显示中跟踪'0'是问题。 –
这表现为数字数据类型。最简单的解决方案 - 与可能失去了一些小型精密铸造为双精度:
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()
将数字格式化为您喜欢的格式。您可以使用display modifier FM
打压微不足道“0”:
SELECT to_char(trunc(31.71429,15), 'FM9999999999.999999999999999')
生成所需的结果 - 作为text
显示(逗号后的10位数字前,15 - 增加更多,如果可以有更多):
'31.71429'
顺便说一下,the manual是有点误导。它说:
前缀填充模式(抑制前导零和填充空白)
但 'FM' 也抑制微不足道尾随零。 I filed a documentation bug report.
这确实是数据表示的问题,而不是数据值。并且各种客户可以用各种方式表示它(带或不带尾随零) – Abelisto
[那么你有你的答案吗?](http://meta.stackexchange.com/a/5235/169168) –
是唯一的方法是投入双精度..但我仍然不知道什么样的信息会丢失,因为现在它对待简单的数据 – Kamfasage