Sql server 将0.5四舍五入并低于零的更简洁的方法?

Sql server 将0.5四舍五入并低于零的更简洁的方法?,sql-server,rounding,Sql Server,Rounding,如何使0.5和0.49999四舍五入为零(精确到最接近的整数),而使0.51四舍五入为1? 我想我可以做到以下几点,但有没有更简洁的方法 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

如何使0.5和0.49999四舍五入为零(精确到最接近的整数),而使0.51四舍五入为1? 我想我可以做到以下几点,但有没有更简洁的方法

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.51为浮点数),0)为五一
,铸造时的情况(0.5浮球)这个怎么样

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
结果:

select  amt, ceiling(amt - 0.5)
from
(
    select  amt = 0.51  union all
    select  0.5     union all
    select  0.4999999   
) a

您可以将的第三个参数与
CASE
组合使用:

圆形(数值表达式,长度[,函数]

当忽略函数或函数值为0(默认值)时,数值_表达式将四舍五入当指定的值不是0时,数值表达式将被截断。


通常将数字四舍五入,但如果被
1
除的余数是
.5
,则减去
.5

DECLARE @v DECIMAL(18,8) = 0.5;
SELECT ROUND(@v, 0, CASE WHEN @v %0.5 = 0 THEN 1 ELSE 0 END);

银行舍入?当然,如果这是它的名称,我只是将一个数量拆分为两个,如果我对奇数进行50/50拆分,我不希望再出现一个。自定义舍入时,mod(
%
)应该是您的运算符。这不是银行舍入。是的。你是对的@nicompSQL服务器不支持你建议的mod。它不应该是
-0.5
而不是
+0.5
DECLARE @v DECIMAL(18,8) = 0.5;
SELECT ROUND(@v, 0, CASE WHEN @v %0.5 = 0 THEN 1 ELSE 0 END);
select
  round(case when v % 1 = .5 then v - .5 else v end, 0)