二维码

[基础语法] abap四舍五入函数,从小数点最后一位进位

Twilight发表于 2014-11-26 14:38Twilight 最后回复于 2014-11-26 14:38 [复制链接] 13114 0

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

程序代码:
  1. DATA : dat  TYPE p DECIMALS 9 VALUE '12.5445' ,
  2.        dat1 TYPE p DECIMALS 9 .

  3. DATA   dat2 TYPE p DECIMALS 9 VALUE '12.540'.

  4. * 方法一
  5. CALL FUNCTION 'HR_NZ_ROUNDING_DECIMALS'
  6.   EXPORTING
  7.     value_in                 = dat
  8.     conv_dec                 = 2      " 设置保留几位小数,从小数点最后一位进位
  9.   IMPORTING
  10.     value_out                = dat1
  11.   EXCEPTIONS
  12.     no_rounding_required     = 1
  13.     decimals_greater_than_10 = 2
  14.     rounding_error           = 3
  15.     OTHERS                   = 4.

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

  19. * 方法二
  20. CALL FUNCTION 'ROUND'
  21.   EXPORTING
  22.     decimals      = 0       " 保留多少位小数
  23.     input         = dat2
  24.     sign          = '+'     " + 向上取舍 - 向下取舍 (负数也一样)
  25.   IMPORTING
  26.     output        = dat1    " 输出返回结果
  27.   EXCEPTIONS
  28.     input_invalid = 1
  29.     overflow      = 2
  30.     type_invalid  = 3
  31.     OTHERS        = 4.

  32. WRITE: /'方法二(保留0位小数):'.
  33. WRITE: / dat2, ' => ' ,dat1.
  34. WRITE: / '----------------------------------------------------'.
复制代码

执行结果:
四舍五入函数.jpg

相关的小数处理:
abap 向上取整CEIL和向下取整FLOOR
回复

使用道具 举报

快速回帖

本版积分规则
您需要登录后才可以回帖 登录 | 注册有礼

快速回复 返回顶部 返回列表