If x = 1.71 Then output = 1
If x = 1.82 Then output = 2我的向上舍入因子是0.8
如何在Oracle存储过程计算中实现这一点?
发布于 2018-07-16 18:43:24
在您给出的最小示例中,您希望使用调整后的值执行ceil():
ceil(x - 0.8)使用CTE中的一些示例值进行演示:
with t (x) as (
select 1.5 + (level - 1)/10 from dual connect by level <= 5
union all select 1.71 from dual
union all select 1.78 from dual
union all select 1.79 from dual
union all select 1.81 from dual
union all select 1.82 from dual
)
select x, ceil(x - 0.8)
from t
order by x;
X CEIL(X-0.8)
---------- -----------
1.5 1
1.6 1
1.7 1
1.71 1
1.78 1
1.79 1
1.8 1
1.81 2
1.82 2
1.9 2目前还不清楚1.8会发生什么。
在PL/SQL中,您可以执行相同的操作:
y := ceil(x - 0.8);发布于 2018-07-16 18:45:33
使用ROUND和.5的偏移量。所以对于你的0.8因子,然后是0.5 = 0.8 - 0.3,从你的值中减去0.3:
SQL Fiddle
Oracle 11g R2架构设置
CREATE TABLE table_name ( value ) AS
SELECT +1.71 FROM DUAL UNION ALL
SELECT +1.80 FROM DUAL UNION ALL
SELECT +1.81 FROM DUAL UNION ALL
SELECT -1.19 FROM DUAL UNION ALL
SELECT -1.20 FROM DUAL;查询1
SELECT value,
ROUND( value - 0.3 ) AS rounded_value
FROM table_name| VALUE | ROUNDED_VALUE |
|-------|---------------|
| 1.71 | 1 |
| 1.8 | 2 |
| 1.81 | 2 |
| -1.19 | -1 |
| -1.2 | -2 |根据您希望如何处理舍入因子边界上的值,有使用ROUND、FLOOR和CEIL的不同方法,每种方法在边界值上都会产生不同的结果:
ROUND( value - 0.3 )将对边界上的值进行舍入,使其远离0-因此将对正值进行向上舍入,而对负值进行down.CEIL( value - 0.8 )将对边界处的值进行向上舍入down.FLOOR( value + 0.2 )将对边界上的值进行向上舍入。SQL Fiddle
查询2
SELECT value,
ROUND( value - 0.3 ) AS rounded_value,
CEIL( value - 0.8 ) AS ceiling_value,
FLOOR( value + 0.2 ) AS floored_value
FROM table_name| VALUE | ROUNDED_VALUE | CEILING_VALUE | FLOORED_VALUE |
|-------|---------------|---------------|---------------|
| 1.71 | 1 | 1 | 1 |
| 1.8 | 2 | 1 | 2 |
| 1.81 | 2 | 2 | 2 |
| -1.19 | -1 | -1 | -1 |
| -1.2 | -2 | -2 | -1 |
| -1.21 | -2 | -2 | -2 |https://stackoverflow.com/questions/51359398
复制相似问题