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

本文深入探讨ABAP编程语言中处理数值四舍五入的两种主要函数:ROUND和HR_NZ_ROUNDING_DECIMALS。通过实例展示如何使用这些函数精确控制数值的舍入过程,包括向上、向下取整及指定小数位数。

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

a = '1.36'.
b = '1.34'.
c = a / b.
WRITE:/,c. "输出 1.015
c = CEIL( a / b ).
WRITE:/,c. "输出 2.000
c = FLOOR( a / 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 p DECIMALS 9 VALUE '12.5445',
       dat1 TYPE p DECIMALS 9,
       dat2 TYPE p DECIMALS 9 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: / '----------------------------------------------------'.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

ChampaignWolf

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值