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