首页 > 解决方案 > 将 0.5 及以下舍入为零的更简洁方法?

问题描述

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

标签: sql-serverrounding

解决方案


这个怎么样

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

推荐阅读