******************************************************************************* Title:: Convert decimal number to text for checks Description:: Convert decimal number to text for checks Parameters:: INPUT p-param1 AS DECIMAL RETURNS CHARACTER History:: ******************************************************************************/ /* Based on code from: Marin Lazar Sr. DB / UNIX Admin Somerville USAGE: textamt = num2text.p(876543231.99). DISPLAY textamt FORMAT "x(120)". */ FUNCTION num2text RETURNS CHARACTER (INPUT p-Amt AS DECIMAL): DEFINE VARIABLE v_TxtHundreds AS CHARACTER EXTENT 4 NO-UNDO INITIAL ["Billion","Million","Thousand","Hundred"]. DEFINE VARIABLE v_TxtTens AS CHARACTER EXTENT 10 NO-UNDO INITIAL ["","","Twenty","Thirty","Forty","Fifty","Sixty","Seventy","Eighty","Ninety"]. DEFINE VARIABLE v_TxtUnits AS CHARACTER EXTENT 20 NO-UNDO INITIAL ["Zero","One","Two","Three","Four","Five","Six","Seven","Eight","Nine","Ten", "Eleven","Twelve","Thirteen","Fourteen","Fifteen","Sixteen","Seventeen","Eighteen","Nineteen"]. DEFINE VARIABLE v_NumHundreds AS INTEGER EXTENT 4 NO-UNDO INITIAL [1000000000,1000000,1000,1]. DEFINE VARIABLE v_Amt AS DECIMAL NO-UNDO. DEFINE VARIABLE v_Cents AS INTEGER NO-UNDO. DEFINE VARIABLE i AS INTEGER NO-UNDO. DEFINE VARIABLE x AS INTEGER NO-UNDO. DEFINE VARIABLE v_Hundreds AS INTEGER NO-UNDO. DEFINE VARIABLE v_Tens AS INTEGER NO-UNDO. DEFINE VARIABLE v_Units AS INTEGER NO-UNDO. DEFINE VARIABLE v_Results AS CHARACTER NO-UNDO. v_Amt = TRUNCATE(p-Amt,2). IF v_Amt < 0 THEN ASSIGN v_Results = v_Results + "Negative " v_Amt = - v_Amt. ASSIGN v_Cents = (v_Amt - TRUNCATE(v_Amt,0)) * 100 v_Amt = TRUNCATE(v_Amt,0). IF v_Amt = 0 THEN v_Results = v_Results + v_TxtUnits[1] + " ". DO i = 1 TO 4: x = TRUNCATE(v_Amt / v_NumHundreds[i],0). IF x = 0 THEN DO: v_Amt = v_Amt MOD v_NumHundreds[i]. NEXT. END. ASSIGN v_Hundreds = TRUNCATE(x / 100,0) x = x MOD 100 v_Tens = TRUNCATE(x / 10,0) v_Units = x MOD 10. IF v_Tens = 1 THEN ASSIGN v_Units = v_Units + 10 v_Tens = 0. IF v_Hundreds > 0 THEN v_Results = v_Results + v_TxtUnits[v_Hundreds + 1] + " " + v_TxtHundreds[4] + " ". IF v_Tens > 0 THEN ASSIGN v_Results = v_Results + v_TxtTens[v_Tens + 1] v_Results = v_Results + IF v_Units > 0 THEN "-" ELSE " ". IF v_Units > 0 THEN v_Results = v_Results + v_TxtUnits[v_Units + 1] + " ". IF i < 4 THEN v_Results = v_Results + v_TxtHundreds[i] + " ". v_Amt = v_Amt MOD v_NumHundreds[i]. END. v_Results = v_Results + "Dollars AND " + (IF v_Cents = 0 THEN "No" ELSE STRING(v_Cents,"99")) + " Cents". /* + STRING(v_Cents,"99") + "/100" */ RETURN v_Results. END FUNCTION. /* num2text */ /* end of program */