首页/数据/SQL 速查/ROUND 四舍五入与精度陷阱
本包目录(311 条)
查询基础33 条连接与子查询40 条聚合与窗口函数54 条
函数速查60 条
变更与事务52 条性能与执行计划72 条

ROUND 四舍五入与精度陷阱

按小数位舍入:整数位也可通过负的位数处理;浮点参数的舍入行为与十进制精度有关,金额场景应使用 DECIMAL。

SQL 速查数据更新于 2026-10-12

示例

示例
SELECT ROUND(2.5);        -- 3
SELECT ROUND(2.345, 2);   -- 2.35
SELECT ROUND(1234.5678, -2);  -- 1200(MySQL 支持负位数)
SELECT ROUND(amount, 2) FROM orders;
精确值MySQL 对精确类型(DECIMAL)按“远离零”舍入
浮点FLOAT/DOUBLE 受二进制表示影响,结果可能出人意料
PostgreSQLnumeric 远离零舍入;double precision 按就近偶数舍入(银行家舍入)

易错点

  • SELECT ROUND(2.675, 2) 在浮点参数下可能得 2.67(二进制无法精确表示 2.675),金额一律走 DECIMAL
  • 先 SUM 再 ROUND 与逐行 ROUND 再 SUM 结果会不同,报表要固定“在哪个层级舍入”的口径

数据来源与参考

  • MySQL 8.0 Reference Manual · ROUND
  • PostgreSQL Documentation · Mathematical Functions
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌