You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在SQL Server中将-13422.8450舍入为-13422.84?

解决SQL Server中ROUND函数舍入结果不符合预期的问题

问题原因

SQL Server的ROUND()函数默认采用银行家舍入法(四舍六入五成双):当要舍入的数字末位为5且后续无有效数字时,会舍入到最近的偶数位。对于负数的-13422.8450,默认舍入逻辑会返回-13422.85,与你期望的-13422.84不符。

最优解决方案

使用ROUND()函数的第三个参数(截断模式),当该参数指定为非零值时,函数会直接截断目标小数位后的数字,而非执行舍入:

修改后的完整查询语句

SELECT ROUND(CAST(-1 * 50 * 26845.69 / 100 AS NUMERIC(13, 4)), 2, 1)

其他可选方案

如果需要更灵活的舍入逻辑,还可以采用以下方式:

  • 向零截断法:通过乘法转整数再转回小数,实现向零方向截断:
    SELECT CAST(CAST(CAST(-1 * 50 * 26845.69 / 100 AS NUMERIC(13, 4)) * 100 AS INT) AS NUMERIC(13,2)) / 100
    
  • CEILING函数法:利用CEILING()对负数的向上取整特性,实现向零舍入:
    SELECT CEILING(CAST(-1 * 50 * 26845.69 / 100 AS NUMERIC(13, 4)) * 100) / 100
    

内容的提问来源于stack exchange,提问作者Piyush Kumar

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.20 19:22:18