Round values up to nears valueThe ROUND' command only rounds to nearest value whether it be up or down. Therefor the following code demonstrates how to always round a number UP 1 or 2 decimal places.
*Rounds a value UP to 2 decimal places
REPORT zround2.
PARAMETER: p_value type p decimals 3 default '22.123'.
DATA: d_value type p decimals 2,
d_int1 TYPE i,
d_int2 TYPE i,
d_number(20) TYPE c,
d_num_result(20) TYPE c,
d_decimal(2) TYPE c.
****************************************************************
*START-OF-SELECTION.
START-OF-SELECTION.
d_number = p_value.
SHIFT d_number LEFT UP TO '.'.
SHIFT d_number LEFT.
d_decimal = d_number+0(2).
d_decimal = d_decimal + 1.
Clear: d_number.
d_number = p_value.
SHIFT d_number RIGHT DELETING TRAILING '123456789 '.
SHIFT d_number LEFT DELETING LEADING ' '.
CONCATENATE d_number d_decimal INTO d_num_result.
d_value = d_num_result.
write:/ 'Value rounded up to 2 decimal places is ', d_value.
*Rounds a value UP to 1 decimal place
REPORT zround1.
PARAMETER: p_value TYPE p DECIMALS 3 DEFAULT '22.123'.
DATA: d_value TYPE p DECIMALS 1,
d_int1 TYPE i,
d_int2 TYPE i,
d_number(20) TYPE c,
d_num_result(20) TYPE c,
d_decimal(2) TYPE c.
****************************************************************
*START-OF-SELECTION.
START-OF-SELECTION.
d_number = p_value / 10.
SHIFT d_number LEFT UP TO '.'.
SHIFT d_number LEFT.
d_decimal = d_number+0(2).
d_decimal = d_decimal + 1.
CLEAR: d_number.
d_number = p_value / 10.
SHIFT d_number RIGHT DELETING TRAILING '123456789 '.
SHIFT d_number LEFT DELETING LEADING ' '.
CONCATENATE d_number d_decimal INTO d_num_result.
d_value = d_num_result * 10.
WRITE:/ 'Value rounded up to 2 decimal places is ', d_value.
|
||||||||