You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

在SQL Server中如何对0.5进行取整?示例输入:16.65

在SQL Server中处理含0.5的数值取整(以16.65为例)

嘿,针对你提到的在SQL Server里对包含0.5的数值执行取整的需求(比如示例输入16.65),我整理了几种常用的实现方式,你可以根据业务场景选择合适的:

1. ROUND()函数:标准舍入(默认银行家舍入法)

ROUND()是最常用的取整函数,默认遵循四舍六入五成双(银行家舍入法)——简单说就是当小数部分正好是0.5时,会舍入到最近的偶数;如果小数部分大于0.5则直接进位。

  • 针对你的示例16.65:
SELECT ROUND(16.65, 0); -- 返回结果:17.00

因为16.65的小数部分是0.65>0.5,所以直接进位到17。

  • 若遇到正好是x.5的数值(比如16.5、17.5):
SELECT ROUND(16.5, 0); -- 返回16.00(16是偶数,舍去0.5)
SELECT ROUND(17.5, 0); -- 返回18.00(17是奇数,进位到偶数18)

如果想要强制对x.5的数值都进位(不遵循银行家舍入),可以用自定义逻辑:

SELECT 
    CASE 
        WHEN ABS(YourNumber) - FLOOR(ABS(YourNumber)) = 0.5 
        THEN FLOOR(YourNumber) + SIGN(YourNumber) 
        ELSE ROUND(YourNumber, 0) 
    END AS RoundedValue
FROM YourTable;

YourNumberYourTable换成你实际的字段和表名即可。

2. CEILING()函数:向上取整

不管小数部分是多少,直接取大于等于该数值的最小整数:

SELECT CEILING(16.65); -- 返回17
SELECT CEILING(16.15); -- 同样返回17

适合需要“只要有小数就进位”的场景。

3. FLOOR()函数:向下取整

直接取小于等于该数值的最大整数,也就是舍去所有小数部分:

SELECT FLOOR(16.65); -- 返回16
SELECT FLOOR(16.99); -- 还是返回16

4. 直接转换为整数类型:截断取整

通过CASTCONVERT把数值转为INT类型,会直接截断小数部分,对正数来说效果和FLOOR()一致,但负数要注意区别:

SELECT CAST(16.65 AS INT); -- 返回16
SELECT CONVERT(INT, 16.65); -- 返回16

⚠️ 注意:如果是负数,比如-16.65CAST会返回-16,而FLOOR()会返回-17,根据需求选择。

内容的提问来源于stack exchange,提问作者rajesh kumar

火山引擎 最新活动