Rounding Off - Function Modules (FMs) - SAP ABAP.
There are a lot of options in SAP ABAP for rounding off a particular amount or value.
1. J_1I6_ROUND_TO_NEAREST_AMT: - Its a standard SAP function module that performs Rounding off the excise value functionality. This FM is to be used only for Indian Values with 2 decimal digits.
For example it will help you to round off a value like 120.49 to 120.00 or 120.51 to 121.00.
2. HR_IN_ROUND_AMT: It's used to compute the nearest rounded off amount with respect to an index. But again you are not allowed to have a value with ore than 2 decimal digit.
Example:
Round off amount 47.42 to the nearest five Paise
O/P : 47.40
Round off amount 47.42 to the nearest rupee
O/P : 47.00
Round Off Amount 47.42 to the nearest 5 Rupee.
O/P: 45.00
Round Off Amount 47.51 to the nearest 5 Rupee.
O/P: 50.00
1. J_1I6_ROUND_TO_NEAREST_AMT: - Its a standard SAP function module that performs Rounding off the excise value functionality. This FM is to be used only for Indian Values with 2 decimal digits.
For example it will help you to round off a value like 120.49 to 120.00 or 120.51 to 121.00.
2. HR_IN_ROUND_AMT: It's used to compute the nearest rounded off amount with respect to an index. But again you are not allowed to have a value with ore than 2 decimal digit.
Example:
Round off amount 47.42 to the nearest five Paise
O/P : 47.40
Round off amount 47.42 to the nearest rupee
O/P : 47.00
Round Off Amount 47.42 to the nearest 5 Rupee.
O/P: 45.00
Round Off Amount 47.51 to the nearest 5 Rupee.
O/P: 50.00
3. Using ROUND function: It's the most simple way of rounding off the values or amount to the required nearest decimal places.
SYNTAX:
DATA: gwa_ekpo type ekpo.
gv_ekpo-netwr = round( val = gv_ekpo-netwr dec = N ).
N stands for nearest decimal place.
EXAMPLE:
DATA(lv_round) = round( val = '5678.65800341' dec = 2 ).
WRITE: lv_round.
DATA(lv_round1) = round( val = '5678.65300341' dec = 2 ).
WRITE:/ lv_round1.
DATA(lv_round2) = round( val = '5678.65800741' dec = 5 ).
WRITE:/ lv_round2.
DATA(lv_round3) = round( val = '5678.65800341' dec = 5 ).
WRITE:/ lv_round3.
DATA(lv_round4) = round( val = '5678.65300341' dec = 3 mode = cl_abap_math=>round_up ).
WRITE:/ lv_round4.
DATA(lv_round5) = round( val = '5678.653' dec = 0 mode = cl_abap_math=>round_up ).
WRITE:/ lv_round5.
DATA(lv_round6) = round( val = '5678.001' dec = 0 mode = cl_abap_math=>round_up ).
WRITE:/ lv_round6.
DATA(lv_round7) = round( val = '5678.65880341' dec = 3 mode = cl_abap_math=>round_down ).
WRITE:/ lv_round7.
DATA(lv_round8) = round( val = '5678.999' dec = 0 mode = cl_abap_math=>round_down ).
WRITE:/ lv_round8.
DATA(lv_round9) = round( val = '5678.001' dec = 0 mode = cl_abap_math=>round_down ).
WRITE:/ lv_round9.
MODE: ROUND_UP
Round away from zero. Always increments the digit prior to a nonzero discarded fraction.
MODE: ROUND_DOWN
Round towards zero. Never increments the digit prior to a discarded fraction, that is, truncates.
WRITE:/ lv_round4.
DATA(lv_round5) = round( val = '5678.653' dec = 0 mode = cl_abap_math=>round_up ).
WRITE:/ lv_round5.
DATA(lv_round6) = round( val = '5678.001' dec = 0 mode = cl_abap_math=>round_up ).
WRITE:/ lv_round6.
DATA(lv_round7) = round( val = '5678.65880341' dec = 3 mode = cl_abap_math=>round_down ).
WRITE:/ lv_round7.
DATA(lv_round8) = round( val = '5678.999' dec = 0 mode = cl_abap_math=>round_down ).
WRITE:/ lv_round8.
DATA(lv_round9) = round( val = '5678.001' dec = 0 mode = cl_abap_math=>round_down ).
WRITE:/ lv_round9.
MODE: ROUND_UP
Round away from zero. Always increments the digit prior to a nonzero discarded fraction.
MODE: ROUND_DOWN
Round towards zero. Never increments the digit prior to a discarded fraction, that is, truncates.