Indicate Negative Numbers with Parentheses
January 11, 2006 Hey, Ted
Thank you for a newsletter with information that is always interesting and useful. I enjoyed reading about your IIF function. Here is a function I wrote a few years back on V5R1. It returns a numeric value edited for displaying or printing that includes parenthesis when the value is negative. Our accountants prefer that negative numbers appear within parenthesis. The value returned contains two decimals, as this function is primarily used for monetary amounts. –Glenn T. Berg, programmer/analyst It was good of Glenn to share his EditParens function with the rest of us. I don’t blame the bean counters for wanting to see negative numbers in parentheses. Those trailing minus signs don’t stand out as well, and can get lost when numbers are displayed or printed close together. If a number is negative, EditParens places a floating opening parenthesis immediately before the first non-blank character of the edited result and follows the edited number with a closing parenthesis. If the number is not negative, the positions that the parentheses would fill are left blank. Here is the procedure prototype for the EditParens function. In my testing, I put it in member EditParens of source physical file PROTOTYPES. D* Prototype for Subprocedure EditParens D EditParens PR 42A VARYING D Val 30P 2 VALUE Here’s the function itself. *----------------------------------------------------------------------- * Subprocedure EditParens - Place Parentheses Around Negative Number *----------------------------------------------------------------------- H nomain D/copy prototypes,EditParens P EditParens B EXPORT D* Procedure Interface D EditParens PI 42A VARYING D Val 30P 2 VALUE D* Local Work fields D Lparen C CONST('(') D Rparen C CONST(')') D WRK S 42A VARYING * Edited Value * Note that the '1' edit code does not include a sign so we * don't have to calculate the absolute value when negative. C If Val >=0 C Eval WRK = %TrimL(%Editc(Val:'1')) + C ' ' C Else C Eval WRK = Lparen + C %TrimL(%Editc(Val:'1')) + C RParen C End C Return WRK P E Here’s an example of how a calling routine might invoke EditParens. Numeric variables WXCUR and WXYTD are copied into edited variables WXCURO and WXYTDO. D WXYTD s 9P 2 D WXCUR s 7P 2 D WXYTDO s 14A D WXCURO s 11A D/copy prototypes,EditParens C EvalR WXYTDO = EditParens(WXYTD) C EvalR WXCURO = EditParens(WXCUR) I will leave it to the reader to place the routine in an appropriate module or service program. This is a topic I dealt with in the January 4 edition of Four Hundred Guru. –Ted RELATED STORIES |