如何在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
相关产品推荐
相关产品推荐

