首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何通过特定的四舍五入因子进行Roundup?

如何通过特定的四舍五入因子进行Roundup?
EN

Stack Overflow用户
提问于 2018-07-16 18:10:43
回答 2查看 98关注 0票数 0
代码语言:javascript
复制
If x = 1.71 Then output = 1
If x = 1.82 Then output = 2

我的向上舍入因子是0.8

如何在Oracle存储过程计算中实现这一点?

EN

回答 2

Stack Overflow用户

发布于 2018-07-16 18:43:24

在您给出的最小示例中,您希望使用调整后的值执行ceil()

代码语言:javascript
复制
ceil(x - 0.8)

使用CTE中的一些示例值进行演示:

代码语言:javascript
复制
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中,您可以执行相同的操作:

代码语言:javascript
复制
y := ceil(x - 0.8);
票数 2
EN

Stack Overflow用户

发布于 2018-07-16 18:45:33

使用ROUND.5的偏移量。所以对于你的0.8因子,然后是0.5 = 0.8 - 0.3,从你的值中减去0.3

SQL Fiddle

Oracle 11g R2架构设置

代码语言:javascript
复制
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

代码语言:javascript
复制
SELECT value,
       ROUND( value - 0.3 ) AS rounded_value
FROM   table_name

代码语言:javascript
复制
| VALUE | ROUNDED_VALUE |
|-------|---------------|
|  1.71 |             1 |
|   1.8 |             2 |
|  1.81 |             2 |
| -1.19 |            -1 |
|  -1.2 |            -2 |

根据您希望如何处理舍入因子边界上的值,有使用ROUNDFLOORCEIL的不同方法,每种方法在边界值上都会产生不同的结果:

  • ROUND( value - 0.3 )将对边界上的值进行舍入,使其远离0-因此将对正值进行向上舍入,而对负值进行down.
  • CEIL( value - 0.8 )将对边界处的值进行向上舍入down.
  • FLOOR( value + 0.2 )将对边界上的值进行向上舍入。

SQL Fiddle

查询2

代码语言:javascript
复制
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

代码语言:javascript
复制
| 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 |
票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51359398

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档