将 DOUBLE PRECISION 转换为 VARCHAR 后出现尾随零

Trailing zeros appears after casting DOUBLE PRECISION to VARCHAR

尝试将 DOUBLE PRECISION 值转换为 VARCHAR 时,我得到了一系列 12 个不需要的尾随零。

例如:

SELECT CAST(CAST(2500 AS DOUBLE PRECISION) AS VARCHAR(50))
FROM rdb$database

它会产生以下意想不到的结果:

2500.000000000000

预期结果:

2500

是什么导致了这个问题,如何避免?

此问题的直接解决方法是使用

trim(trailing '.' from trim(trailing '0' from stringvalue))

您可以将其包装在 PSQL 函数中以便于重用。

但是,这是一个有风险的解决方案,因为非常大或非常小的数字将以科学记数法呈现,并且此解决方案会从指数中去除零。例如,作为字符串的值 1.2e30 将呈现为 1.200000000000000e+30,但上述解决方案会将其分解为 1.200000000000000e+3(即 1200)。

正如 Arioch 'The 已经在评论中建议的那样,这是一个在应用程序的表示层中更好解决的问题(然后它还可以考虑区域设置之类的东西来处理小数点分隔符、千位分隔符等) .

或者,您可以尝试寻找第三方 UDF 或 UDR(或自己构建一个),它们允许您使用所需的格式来格式化数字。