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 : / '----------------------------------------------------' .
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: / '----------------------------------------------------'.