【问题标题】:Costume rounding numbers服装四舍五入数字
【发布时间】:2020-11-30 07:50:35
【问题描述】:

我想像这样在 SQL Server 中对一些数字进行四舍五入:如果逗号后面的数字在 500 以下,我想做 500,如果数字超过 500,我想加一个并在点 0 后面做数字

示例 1.020 我想把它变成 1.500 和 1.501 我想把它变成 2.000

【问题讨论】:

  • 你试过什么?你在哪里卡住了?请向我们展示您的尝试。顺便说一句,服装在这种情况下意味着什么?
  • 可能“服装”意味着“定制”?

标签: sql sql-server tsql decimal


【解决方案1】:

试试这个:

您可以使用 % 模运算符将十进制值与整数分开,

DECLARE @DataSource TABLE([value]  DECIMAL(9,3));

INSERT INTO @DataSource ([value])
VALUES (1.020),(1.501),(0.250),(0.680);


SELECT *,CASE WHEN [value]%1>0.500 THEN CAST([value] AS INT)+1.000 ELSE  CAST([value] AS INT)+0.500 END
FROM @DataSource

【讨论】:

    【解决方案2】:

    试试这个:

    DECLARE @DataSource TABLE
    (
        [value]  DECIMAL(9,3)
    );
    
    INSERT INTO @DataSource ([value])
    VALUES (1.020)
          ,(1.501)
          ,(0.250)
          ,(0.680);
    
    SELECT [value]
          ,CAST
           (
               CAST([value] AS INT) 
               +
               CASE WHEN [value] * 1000 % 1000 > 500
                     THEN 1
                     ELSE 0.5
               END
               AS DECIMAL(9,3)
           ) AS [new_value]
    FROM @DataSource;
    

    想法是获取点之后的值,并与500进行比较。然后,将10.5添加到点之前的值。

    【讨论】:

      【解决方案3】:

      一种选择是使用ROUND()CEILING() 函数,例如

      SELECT nr,CASE WHEN nr=ROUND(nr,0) 
                     THEN nr 
                     ELSE CASE WHEN ROUND(nr,0)=ROUND(nr,1) THEN
                                    CEILING(ROUND(nr,1)*15)/10 
                               ELSE ROUND(nr,0)
                                END
                      END AS rounded_nr
        FROM t
      

      Demo

      【讨论】:

        【解决方案4】:

        据我了解,您希望四舍五入到下一个 0.000 或 0.500 的值。

        您可以使用CEILING 函数进行四舍五入。但是,它会四舍五入到下一个整数值。

        如果你想支持一半,然后乘以 2,你会得到整个值。所以先乘以 2,然后四舍五入。并将结果再次除以得到正确的值:

        SELECT columnToRoundUp, CEILING(columnToRoundUp*2)/2 as RoundedValue
        FROM (
                  SELECT 1.20 as columnToRoundUp
            UNION SELECT 2.49
            UNION SELECT 3.50
            UNION SELECT 4.51
            UNION SELECT 5.70
            UNION SELECT 6.99
            UNION SELECT 7.00) a
        

        Fiddle

        【讨论】:

          猜你喜欢
          • 2015-11-12
          • 1970-01-01
          • 2021-03-23
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2023-01-12
          • 2012-08-04
          相关资源
          最近更新 更多