SELECT ROUND(CAST(0.51 AS FLOAT), 0) AS FiveOne
, ROUND(CAST(0.5 AS FLOAT), 0) AS Five
, ROUND(CAST(0.4999999 AS FLOAT), 0) AS FourNine
FiveOne Five FourNine
---------------------- ---------------------- ----------------------
1 1 0
如何将0.5和0.49999舍入为零(降至最接近的整数),但0.51回合为1? 我想我可以做到以下几点,但有更简洁的方法吗?
SELECT ROUND(CAST(0.51 AS FLOAT), 0) AS FiveOne
, CASE WHEN CAST(0.5 AS FLOAT) <= CAST(0.5 AS FLOAT)
THEN FLOOR(CAST(0.5 AS FLOAT))
ELSE ROUND(CAST(0.5 AS FLOAT), 0)
END AS Five
, ROUND(CAST(0.4999999 AS FLOAT), 0) AS FourNine
FiveOne Five FourNine
---------------------- ---------------------- ----------------------
1 0 0
答案 0 :(得分:2)
这个怎么样
select amt, ceiling(amt - 0.5)
from
(
select amt = 0.51 union all
select 0.5 union all
select 0.4999999
) a
结果:
0.5100000 1
0.5000000 0
0.4999999 0
答案 1 :(得分:1)
正常舍入数字,但如果除以.5
的余数为1
,则减去.5
:
select
round(case when v % 1 = .5 then v - .5 else v end, 0)
答案 2 :(得分:0)
您可以使用ROUND
的第三个参数与CASE
结合使用:
ROUND(numeric_expression,length [,function] )
当省略函数或者值为0(默认值)时,numeric_expression会四舍五入。 当指定0以外的值时,将截断numeric_expression。
DECLARE @v DECIMAL(18,8) = 0.5;
SELECT ROUND(@v, 0, CASE WHEN @v %0.5 = 0 THEN 1 ELSE 0 END);
<强> DBFiddle Demo 强>