向上取整;向下取整;四捨五入
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: / '----------------------------------------------------'.