繁体   English   中英

向上或向下舍入数字,基于 0.5 且最接近整数

[英]Rounding number up or down, based on 0.5 and closest to round number

在 SQL Server 中使用CEILING 和 FLOOR 时遇到问题。

问题是,我想根据十进制值 0.5 进行四舍五入

例如:

- 2.56 -> 3
- 1.2 -> 1
- 4.1 -> 4
- 0.7 -> 1
- 0.48 -> 0

如您所见,如果十进制值 < .5,我需要获得较低的舍入数,如果 >= .5,则需要得到更高的舍入数。

CEILING 和 FLOOR 只四舍五入到最低或最高十进制值,我没有得到想要的结果。

有什么建议?

我希望round()能做你想做的事。 但如果你想明确,那么试试:

floor(x + 0.5)

阅读这个... https://sqlstudies.com/2016/10/05/floor-round-and-ceiling/

Round进行标准舍入。 如果值等于或大于 0.5,则返回 1。如果小于 0.5,则返回 0

Ceiling返回等于或大于传入值的整数。

    SELECT ROUND(2.56,0); 
    Answer= 3.00

    SELECT ROUND(2.56,1); 
    Answer= 2.60

    SELECT CEILING(2.56);
    Answer= 3

如果您需要将窗口从 0.5 更改为其他内容,则可以使用此逻辑(注意:@number 是您的输入)

DECLARE @Number AS DECIMAL
SET @Number = 0.49

SELECT @Number+ CASE WHEN @Number%1 BETWEEN 0.000 AND 0.249 THEN 0.000 - @Number%1
                     WHEN @Number%1 BETWEEN 0.250 AND 0.500 THEN 0.500 -@Number%1
                     WHEN @Number%1 BETWEEN 0.500 AND 0.749 THEN 0.500 -@Number%1
                     WHEN @Number%1 BETWEEN 0.750 AND 0.999 THEN 1.000 -@Number%1
                END

您可以使用演员表

选择 cast(YourX+0.5 as int);

用这个:

SELECT CAST(ROUND(CAST(0.5 AS NUMERIC(5, 2)),0) AS int)

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM