服装四舍五入
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比较,然后在点前的值上加上1
或0.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
据我了解,您想四舍五入到下一个 .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
我想像这样在 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比较,然后在点前的值上加上1
或0.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
据我了解,您想四舍五入到下一个 .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