服装四舍五入

Costume rounding numbers

我想像这样在 SQL 服务器中舍入一些数字:如果逗号后面的数字低于 500,我想得到 500,如果数字大于 500,我想加一并得到数字在点 0

之后

Example 1.020 I want to make it 1.500 and 1.501 I want to make it 2.000

试试这个:

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

试试这个:

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

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

一个选项是使用 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

据我了解,您想四舍五入到下一个 .000 或 .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