向上取整;向下取整;四舍五入

本文介绍了ABAP编程语言中两种常用的四舍五入函数:ROUND和HR_NZ_ROUNDING_DECIMALS。通过具体示例展示了如何使用这两种函数进行数值处理,包括保留指定小数位数的方法。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

REPORT z_zcd_013.
DATA:TYPE mseg-menge,
     b TYPE mseg-menge,
     TYPE mseg-menge.

'1.36'.
'1.34'.
a / b.
WRITE:/,c"输出 1.015
CEILa / b ).
WRITE:/,c"输出 2.000
FLOORa / b ).
WRITE:/,c"输出 1.000


四舍五入的函数

ABAP 中处理数据的函数方法很多,其中涉及到四舍五入的有两个(可能还有更多):ROUND 和 HR_NZ_ROUNDING_DECIMALS
前者位于Basis功能开发包 SZME 里面,在标准中用于计量单位的计算;
后者主要用于HR模块,位于 PB43 开发包,处理HR模块中的主数据。

HR_NZ_ROUNDING_DECIMALS 函数可以直接输入数值,然后在 CONV_DEC 参数中输入需要保留的小数点即可输出。
ROUND 函数则有点灵活,可以通过 SIGN 参数( ‘+’,’-’ )控制向上取舍,或者向下取舍。

例如:
输入 88.54350 ,如果SIGN = ‘+’ ,保留2位小数,会得到: 88.55000;如果 SIGN = ‘-’,会得到:88.54000
输入 -88.54350,如果SIGN = ‘+’ ,保留2位小数,会得到: -88.54000;如果 SIGN = ‘-’,会得到:-88.55000

程序代码:
DATA dat  TYPE DECIMALS VALUE '12.5445',
       dat1 TYPE DECIMALS 9,
       dat2 TYPE DECIMALS VALUE '12.540'.

* 方法一
CALL FUNCTION 'HR_NZ_ROUNDING_DECIMALS'
  EXPORTING
    value_in                 dat
    conv_dec                 2      " 设置保留几位小数,从小数点最后一位进位
  IMPORTING
    value_out                dat1
  EXCEPTIONS
    no_rounding_required     1
    decimals_greater_than_10 2
    rounding_error           3
    OTHERS                   4.

WRITE/'方法一(保留2位小数):'.
WRITE/ dat' => ' ,dat1.
WRITE'----------------------------------------------------'.

* 方法二

CALL FUNCTION 'ROUND'
  EXPORTING
    decimals      0       " 保留多少位小数
    input         dat2
    sign          '+'     " + 向上取舍 - 向下取舍 (负数也一样)
  IMPORTING
    output        dat1    " 输出返回结果
  EXCEPTIONS
    input_invalid 1
    overflow      2
    type_invalid  3
    OTHERS        4.

WRITE/'方法二(保留0位小数):'.
WRITE/ dat2' => ' ,dat1.
WRITE'----------------------------------------------------'.


在Python中,向上取整向下取整四舍五入是常见的数值处理操作,可以通过内置函数或数学模块实现。以下是具体方法和示例: --- ### **1. 向上取整(Ceiling)** **方法**: - 使用 `math.ceil()` 函数,返回**大于或等于**输入值的最小整数。 **示例**: ```python import math print(math.ceil(3.2)) # 输出: 4 print(math.ceil(-1.7)) # 输出: -1(向正无穷方向取整) ``` --- ### **2. 向下取整(Floor)** **方法**: - 使用 `math.floor()` 函数,返回**小于或等于**输入值的最大整数。 **示例**: ```python import math print(math.floor(3.8)) # 输出: 3 print(math.floor(-2.3)) # 输出: -3(向负无穷方向取整) ``` --- ### **3. 四舍五入(Round)** **方法**: - 使用内置函数 `round()`,按**银行家舍入规则**处理: - 若小数部分 ≥ 0.5,向上取整;否则向下取整。 - 对 `.5` 的情况,取最近的偶数(如 `round(2.5)` 和 `round(3.5)` 分别返回 `2` 和 `4`)。 **示例**: ```python print(round(3.14159, 2)) # 输出: 3.14(保留2位小数) print(round(4.7)) # 输出: 5 print(round(2.5)) # 输出: 2(最近偶数) print(round(3.5)) # 输出: 4(最近偶数) ``` **注意**: - `round()` 的第二个参数指定保留小数位数(默认为 `0`)。 - 银行家舍入可能导致 `.5` 时结果不符合直观预期。 --- ### **4. 其他相关方法** #### **(1) 截断小数部分(向零取整)** - 使用 `int()` 直接截断小数部分: ```python print(int(3.9)) # 输出: 3 print(int(-2.7)) # 输出: -2 ``` #### **(2) 使用 `numpy` 库(扩展功能)** - 若需更多取整方式(如向远离零取整),可用 `numpy`: ```python import numpy as np print(np.ceil(3.2)) # 4.0 print(np.floor(-1.7)) # -2.0 print(np.round(2.5)) # 2.0(默认非银行家舍入) ``` --- ### **5. 方法对比总结** | 操作 | 函数/方法 | 示例输入 | 示例输出 | 特点 | |---------------|-------------------|----------|----------|--------------------------| | 向上取整 | `math.ceil()` | 3.2 | 4 | 向正无穷方向取整 | | 向下取整 | `math.floor()` | -1.7 | -2 | 向负无穷方向取整 | | 四舍五入 | `round()` | 2.5 | 2 | 银行家舍入(`.5` 取偶数)| | 截断取整 | `int()` | -2.7 | -2 | 直接丢弃小数部分 | --- ### **6. 常见问题** #### **(1) 为什么 `round(2.5)` 返回 `2`?** - Python 的 `round()` 采用银行家舍入规则,避免统计偏差。 #### **(2) 如何实现传统的四舍五入(`.5` 总是进位)?** - 自定义函数: ```python def round_traditional(x): return int(x + 0.5) if x >= 0 else int(x - 0.5) print(round_traditional(2.5)) # 输出: 3 ``` #### **(3) 负数取整的行为差异** - `math.floor(-1.7)` 返回 `-2`(向更小的整数),而 `int(-1.7)` 返回 `-1`(向零截断)。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值