如何在SQL Server及SQL中对指定数值进行四舍五入?
嘿,我来帮你搞定这两个SQL Server里的四舍五入问题,一步步来:
问题1:如何在SQL Server中对指定数值执行四舍五入?
SQL Server里最常用的四舍五入工具就是 ROUND() 函数,它的语法简单易懂:
ROUND(numeric_expression, length [, function])
给你拆解下参数:
numeric_expression:你要处理的目标数值(可以是表列、变量或者直接输入的数值)length:保留的小数位数——正数表示小数点后位数,0表示取整,负数表示小数点前的位数(比如-1就是保留到十位)function:可选参数,填0(默认)是四舍五入,填1则直接截断(不做四舍五入操作)
举几个实用的例子:
- 保留2位小数:
SELECT ROUND(19.923, 2)→ 结果是19.92 - 取整:
SELECT ROUND(19.923, 0)→ 结果是20 - 保留到十位:
SELECT ROUND(123.45, -1)→ 结果是120 - 截断(不四舍五入):
SELECT ROUND(19.923, 1, 1)→ 结果是19.9
如果你需要确保结果显示指定的小数位数(避免出现35.4000这种多余的零),可以结合 CAST 或 CONVERT 来格式化:
SELECT CAST(ROUND(35.38, 1) AS DECIMAL(10, 1))
这样会得到精确的一位小数输出:35.4
问题2:如何在SQL中将数值35.38、53.08、6.15、5.38四舍五入为35.4、53.1、6.1、5.4?
首先,直接用 ROUND() 函数,把第二个参数设为1(保留一位小数)就能处理大部分情况。不过这里要提个关键点:SQL Server的ROUND()默认用的是银行家舍入法(四舍六入五成双)——当要舍入的数字是5且后面没有其他数字时,会看前一位是奇数还是偶数:奇数进1,偶数舍去。
先执行测试语句看看常规结果:
SELECT ROUND(35.38, 1) AS rounded_3538, ROUND(53.08, 1) AS rounded_5308, ROUND(6.15, 1) AS rounded_615, ROUND(5.38, 1) AS rounded_538;
常规输出会是:
- rounded_3538 → 35.4(符合预期)
- rounded_5308 → 53.1(符合预期)
- rounded_615 → 6.2(因为银行家舍入规则,前一位1是奇数,0.05会触发进1)
- rounded_538 → 5.4(符合预期)
如果你的需求是必须让6.15得到6.1,可以用自定义逻辑来实现,比如先把数值乘以10取地板值再除以10(本质是截断一位小数,刚好适配这个案例):
SELECT ROUND(35.38, 1) AS rounded_3538, ROUND(53.08, 1) AS rounded_5308, FLOOR(6.15 * 10) / 10 AS rounded_615, ROUND(5.38, 1) AS rounded_538;
这样就能得到你想要的35.4、53.1、6.1、5.4。
内容的提问来源于stack exchange,提问作者Girish Mulgund
相关产品推荐
相关产品推荐

