You need to enable JavaScript to run this app. PostgreSQL如何将double precision计算结果转为保留两位小数的numeric类型
优惠活动
大模型
产品
解决方案
定价
更多

PostgreSQL如何将double precision计算结果转为保留两位小数的numeric类型

调整方案
  • 实现思路:使用PostgreSQL内置的ROUND(numeric, integer)函数完成计算,该函数的返回值本身就是numeric类型,搭配第二个参数指定保留两位小数即可完全匹配输出要求;不要使用to_char函数,这类函数返回的是文本类型,不符合numeric的输出要求。
  • 精度修正:原语句中将100转为double precision参与运算,会让整个计算链路走双精度浮点逻辑,存在不可控的精度偏差。既然最终输出要numeric类型,直接把运算环节的数值类型统一为numeric,就能从根源避免这类浮点误差。

调整后完整语句

SELECT 
  ROUND(
    (e + u) * 100::numeric / (se + su + OLF),
    2
  ) AS "Sample"
FROM lfs_dept,
  lfs_dept_final sm
WHERE n = sn;

注意事项

  • 上述语句输出的Sample字段为固定标度的numeric类型,严格保留两位小数
  • 不推荐直接对原double precision计算结果强转::numeric(10,2):这类写法会保留浮点计算环节的累计误差,比如理论计算值12.35,可能因为浮点精度偏差被存储为12.3499999999,强转后会被截断为12.34,出现结果偏差
  • 如果业务要求必须保留原有的double precision计算逻辑,可调整表达式为ROUND( ((e + u) * 100::double precision / (se + su + OLF))::numeric, 2 ) AS "Sample",但仍需注意浮点精度带来的结果偏差风险。

内容的提问来源于stack exchange,提问作者Nora S

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.11.05 07:45:04