嗨,如果我使用舍入函数,我有像小数点后 2 位舍入这样的要求,但如果第三位小数小于 5,则不会四舍五入。我的要求是小数点后第三位小数点应该四舍五入。是否可以?
eg: 17.813 need to be 17.82
20.126 need to be 20.13
Select round(17.813,2) from dual will give 17.81
Run Code Online (Sandbox Code Playgroud)
如何得到这个?
您可以乘以 100,使用该ceil()函数将调整后的值“四舍五入”(某种)到最接近的整数,然后再次除以 100:
ceil(<your number> * 100) / 100
Run Code Online (Sandbox Code Playgroud)
演示:
with t (n) as (
select 17.813 from dual
union all select 20.126 from dual
union all select 1.000 from dual
union all select 1.001 from dual
union all select 1.005 from dual
union all select 1.009 from dual
union all select 1.010 from dual
)
select n, ceil(n * 100) / 100 as rounded_up
from t;
N ROUNDED_UP
---------- ----------
17.813 17.82
20.126 20.13
1 1
1.001 1.01
1.005 1.01
1.009 1.01
1.01 1.01
Run Code Online (Sandbox Code Playgroud)
该round()函数使用(对于正数):
ROUND(n, integer) = FLOOR(n * POWER(10, integer) + 0.5) * POWER(10, -integer)
Run Code Online (Sandbox Code Playgroud)
所以你可以用类似的方式概括一个综合版本:
ceil(n * power(10, integer)) * power(10, -integer)
Run Code Online (Sandbox Code Playgroud)
不过,您需要考虑如何处理负值,尽管这可能已经如您所愿;插入 2 作为“整数”值:
with t (n) as (
select 17.813 from dual
union all select 20.126 from dual
union all select 1.000 from dual
union all select 1.001 from dual
union all select 1.005 from dual
union all select 1.009 from dual
union all select 1.010 from dual
union all select -1.000 from dual
union all select 0 from dual
union all select -1.001 from dual
union all select -1.005 from dual
union all select -1.009 from dual
union all select -1.010 from dual
)
select n, ceil(n * power(10, 2)) * power(10, -2) as rounded_up
from t;
N ROUNDED_UP
---------- ----------
17.813 17.82
20.126 20.13
1 1
1.001 1.01
1.005 1.01
1.009 1.01
1.01 1.01
-1 -1
0 0
-1.001 -1
-1.005 -1
-1.009 -1
-1.01 -1.01
Run Code Online (Sandbox Code Playgroud)