PostgreSQL numeric类型查询输出无限小数的Rounding问题
PostgreSQL 数值除法无限小数显示异常解决方案
问题根源
你提供的两种写法失效的核心原因是精度控制操作的执行顺序错误:
你先对sum结果做了四舍五入/固定精度转换,之后才执行除以60的算术运算。PostgreSQL的numeric类型默认会保留算术运算的完整精度,不会自动截断小数位,因此除法操作会重新生成多位小数,相当于之前的精度控制完全失效。
MySQL和PostgreSQL的运算精度默认规则不同,MySQL会自动将除法结果的精度对齐之前转换的字段精度,所以你之前的写法可以在MySQL正常生效,但不适用于PostgreSQL。
可行解决方案
- 方案1:运算完成后再执行四舍五入(最常用,返回numeric类型)
ROUND(sum(column) / 60, 2)
先完成除法运算,再对最终结果保留两位小数,直接实现四舍五入效果。
- 方案2:运算完成后再做固定精度类型转换(返回指定精度的decimal类型)
CAST(sum(column) / 60 AS DECIMAL(18,2))
所有运算结束后再做类型转换,确保最终结果的精度符合要求。
- 方案3:格式化输出为字符串(适合前端展示、数据导出场景)
to_char(sum(column) / 60, '9999999999999999.99')
直接输出格式化后的字符串,无需额外处理即可直接用于展示。
内容的提问来源于stack exchange,提问作者Frankicks
相关产品推荐
相关产品推荐

