## %MAX and %MIN in RPGLE

While working with the data, we often need to identify the minimum or maximum value from the list of values provided.

Built-In functions %MAX (maximum value) and %MIN (minimum value) provides easier way to return the minimum or maximum value from the list of values provided.

Syntax:

%MAX(value1 : value2 : value3 ...)

%MIN(value1 : value2 : value3 ...)

There are few important points to note while working with these BIFs.
• Minimum of two operands (or values) to be passed.
• Data types of the values passed must be compatible with other values.
• If one value is packed numeric, other values can be packed numeric, zoned numeric, integer, unsigned integer, binary decimal or float.
• There is no maximum limit on the number of values to be passed (except when used in the declaration statement, we will see more on this later).
• Values can either be passed directly or by using the declared variables.

Let's have a look at an example to understand easily.

• Line - 11: %MIN is used with the list of values 10.1 (float), 89 (decimal) and a packed decimal field (wNinetyNine) with no decimal points, All these three are compatible for comparison.
• Lowest value here is '10.1' and %MIN would return the same.
• %MIN is returning to a variable which doesn't have decimal points defined, so '10' would be the return value.
• Line - 14: %MAX is used with the list of values 10.9 (float), 89 (decimal) and a packed decimal field (wNinetyNine) with no decimal points.
• Highest value here is '99' and %MAX would return '99'.
• Line - 19: %MIN is used with the two strings 'RETURN', 'MINIMUM' along with a character (VARCHAR) field declared (wConstant).
• Lowest value here is 'CONSTANT' and the same would be returned by %MIN.
• Line - 20: %MAX is used with the two strings 'RETURN', 'MAXIMUM' along with a character (VARCHAR) field declared (wConstant).
• Highest value here is 'RETURN' and the same would be returned by %MAX.

This was a straight forward example with moving the minimum value moving directly to the declared variable.

%MIN and %MAX can be directly used to in conditions to check if the return value is part of a specific range (using %RANGE), list (using %LIST), array or equal to the value passed (or a declared variable).

Let's have a look a small example with IF conditions.

• Line - 3: Checking if the minimum value returned by %MIN is present in a specific range provided using %RANGE.
• Line - 7: Checking if the maximum value returned by %MAX is present in the list of values provided using %LIST.
• An array can be used as well instead of %RANGE or %LIST.
• Line - 11: Checking if the maximum value returned by %MAX is same as the value specified.
• Declared variable can be used as well instead of specifying the value directly.

Apart from these, we can use %MIN and %MAX in declaration statements i.e., to specify the length of a variable or to specify the dimension of array etc.

Below are the couple of points to remember when using these BIFs in declaration statement.
• There must only be two values specified.
• Both the values must be numeric (not float or hexadecimal).
Below is a quick example to show how to use these BIFs in declaration statements.

• Line - 3: %MIN is used to assign the dimension of 'wDecArray2' based on the number of elements in the array 'wDecArray1' and the value passed.
• Since wDecArray1 is a varying-dimension array '*MAX' to be used in %ELEM and maximum dimension of the array would be returned.
• %MIN would return the minimum of both 10 and 15.
• Line - 4: %MAX is used to specify the length of the character variable being declared.
• %MAX would return the maximum of the two values passed.

Hope the above info was a bit of help to understand %MAX and %MIN better.