Pages

Tuesday, February 9, 2021

Built-in Functions %MAX and %MIN in RPGLE - IBM i

%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. 

%MAX and %MIN in RPGLE

In the above example, 
  • 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. 

%MAX and %MIN in RPGLE

In the above example,
  • 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.

%MIN and %MAX in RPGLE

In the above example, 
  • 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. 


If you have any Suggestions or Feedback, Please leave a comment below or use Contact Form. 

No comments:

Post a Comment

Popular Posts