【问题标题】:Rounding number up or down, based on 0.5 and closest to round number向上或向下舍入数字,基于 0.5 并最接近整数
【发布时间】:2019-12-10 11:14:13
【问题描述】:

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

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

例如:

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

如您所见,如果十进制值 = .5,我需要获得更高的整数。

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

有什么建议吗?

【问题讨论】:

标签: sql sql-server


【解决方案1】:

我希望round() 做你想做的事。但是,如果您想明确一点,请尝试:

floor(x + 0.5)

【讨论】:

    【解决方案2】:

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

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

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

        SELECT ROUND(2.56,0); 
        Answer= 3.00
    
        SELECT ROUND(2.56,1); 
        Answer= 2.60
    
        SELECT CEILING(2.56);
        Answer= 3
    

    【讨论】:

    • 0.5 怎么样?示例:在 10.5 上使用 ROUND() 给我 = 10。它不应该四舍五入到 11 吗?
    • SELECT ROUND(10.5, 0) -- 回答 11.0 将计算个位..... SELECT ROUND(10.5, 1) -- 回答 10.5 将计算十位... ..
    【解决方案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
    

    【讨论】:

      【解决方案4】:

      你可以使用演员表

      选择演员表(YourX+0.5 as int);

      【讨论】:

        【解决方案5】:

        使用这个:

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-09-02
          • 1970-01-01
          • 2020-07-01
          相关资源
          最近更新 更多