キーワード:
- FLOOR
- CEIL
- ROUND
- TRUNC
- FRAC
通常の算術処理
ABAP言語が用意した演算子を利用して、通常の算術処理を行うことができます。
算術処理 | 使用される演算子 |
---|---|
加算 | + |
減算 | - |
乗算 | * |
除算 | / |
整数除算 | DIV |
整数除算の余り | MOD |
丸め処理
数字を四捨五入や切り上げ、切り捨てをして整数にまとめるには、関数や汎用モジュールの使用、言語固有の丸め処理を利用するなど、幾つかの方法があります。
関数の使用
以下のような関数を使用することができます。
-
FLOOR 小数点以下切り捨て
-
CEIL 小数点以下切り上げ
例:
DATA: l_value(3) TYPE p DECIMALS 2, l_result1(3) TYPE p DECIMALS 2. l_value= '923.36'. l_result = FLOOR( l_value ). "変数に「923.00」が保持されることになる l_result = CEIL( l_value ). "変数に「923.01」が保持されることになる
汎用モジュールの使用
汎用モジュールROUNDを使用すれば、小数点以下を指定した桁数で切捨て、切上げ、四捨五入することができます。
例:
DATA : l_value TYPE P DECIMALS 2. "TYPE Pを利用 DATA : l_result TYPE P DECIMALS 2. "TYPE Pを利用 l_value = '923.36'. *整数10の位で切り捨て CALL FUNCTION 'ROUND' EXPORTING DECIMALS = -2 "丸めが実行される小数点以下桁数、マイナス可 INPUT = l_value " 丸められる値 SIGN = '-' "+:切り上げ、-:切り捨て、その他:四捨五入 IMPORTING OUTPUT = l_result "丸め後の値 EXCEPTIONS INPUT_INVALID = 1 OVERFLOW = 2 TYPE_INVALID = 3 OTHERS = 4 . WRITE : / '整数10の位で切り捨て:' , l_value , '->' , l_result .
言語固有の丸め処理
ABAP言語は、値を変数に代入する際、変数が桁数不足の場合、自動的に四捨五入処理を行います。
例:
DATA: l_value(3) TYPE p DECIMALS 2, l_result1(3) TYPE p DECIMALS 0. l_value= '923.56'. l_result = l_value. "変数に「923.01」が保持されることになる
その他
数値の整数部取得
指定した数値より小さい最大の整数、または、指定した数値より大きい最小の整数を取得する
指定した数値より小さい最大の整数を取得するにはFLOOR関数を、指定した数値より大きい最小の整数を取得するには、CEIL関数を使います。
下の例1では、選択画面項目「p_dec」に入力した数値より小さい最大の整数と「p_dec」に入力した数値より大きい最小の整数が画面に表示されます。
例:
DATA: v_int1 TYPE i, v_int2 TYPE i. PARAMETERS: p_dec(5) TYPE p DECIMALS 2. v_int1 = floor( p_dec ). v_int2 = ceil( p_dec ). WRITE: v_int1, / v_int2.
<選択画面>
<実行結果画面>
数値の小数部取得
数値の整数部分を取得するにはTRUNC関数を、数値の小数部分を取得するには、FRAC関数を使います。
下の例1では、選択画面項目「p_dec」に入力した数値より整数部分と小数部分が画面に表示されます。
例:
DATA: v_trunc TYPE p DECIMALS 2, v_frac TYPE p DECIMALS 2. PARAMETERS: p_dec TYPE p DECIMALS 2. v_trunc = trunc( p_dec ). "整数部分 v_frac = frac( p_dec ). "小数部分 WRITE: v_trunc, / v_frac.
<選択画面>
<実行結果画面>
数値の絶対値取得
絶対値を取得するには、ABS関数を使います。
下の例では、選択画面項目「p_dec」に入力した数値の絶対値が画面に表示されます。
例:
DATA: v_dec(5) TYPE p DECIMALS 2. PARAMETERS: p_dec(5) TYPE p DECIMALS 2. v_dec = abs( p_dec ). WRITE: v_dec.