Converting a decimal to English words for check printing

Chris Kelleher

Administrator
Staff member
<BLOCKQUOTE><font size="1" face="Arial, Verdana">code:</font><HR><pre>
/*
digits - input variable (decimal)
words - output (character)
*/

DEFINE INPUT PARAMETER digits AS DECIMAL NO-UNDO.
DEFINE OUTPUT PARAMETER words AS CHARACTER NO-UNDO.

DEFINE VARIABLE word-lst AS CHARACTER NO-UNDO INITIAL
"One,Two,Three,Four,Five,Six,Seven,Eight,Nine".
DEFINE VARIABLE word-num AS CHARACTER NO-UNDO.
DEFINE VARIABLE word-ten AS CHARACTER NO-UNDO.

IF digits <= 0 OR digits >= 1000000.00 THEN
words = STRING(digits,"->>>,>>>,>>>.99").
ELSE DO:

ASSIGN
word-num = STRING(digits,">>>>>>>.99")
words = "".

/* add thousands */
{ wordnum.i 2 words }
words = words + (IF words = "" THEN "" ELSE " Thousand ").

/* add hundreds */
{ wordnum.i 5 words }

/* add pennies */
words = (IF INTEGER(SUBSTR(word-num,1,7)) = 0 THEN "Zero" ELSE words)
+ " and "
+ (IF SUBSTR(word-num,9,2) = "00" THEN "no" ELSE SUBSTR(word-num,9,2))
+ "/100".

DO WHILE INDEX(words," ") > 0:
words = SUBSTR(words,1,INDEX(words," ") - 1)
+ SUBSTR(words, INDEX(words," ") + 1).
END.

END.


/* wordnum.i - used by wordnum.p */
/* {2} = result variable {1} = offset into word-num */

{2} = (IF {2} = "" THEN "" ELSE {2}) +
(IF INTEGER(SUBSTR(word-num,{1},1)) = 0 THEN "" ELSE (
ENTRY(INTEGER(SUBSTR(word-num,{1},1)),word-lst) + " Hundred")).
IF INTEGER(SUBSTR(word-num,{1} + 1,2)) = 0 THEN
word-ten = "".
ELSE IF INTEGER(SUBSTR(word-num,{1} + 1,1)) = 0 THEN
word-ten = ENTRY(INTEGER(SUBSTR(word-num,{1} + 2,1)),word-lst).
ELSE IF SUBSTR(word-num,{1} + 1,1) = "1" THEN
word-ten = ENTRY(INTEGER(SUBSTR(word-num,{1} + 2,1)) + 1,
"Ten,Eleven,Twelve,Thirteen,Fourteen,Fifteen,Sixteen,"
+ "Seventeen,Eighteen,Nineteen").
ELSE
word-ten = ENTRY(INTEGER(SUBSTR(word-num,{1} + 1,1)) - 1,
"Twenty,Thirty,Forty,Fifty,Sixty,Seventy,Eighty,Ninety")
+ (IF INTEGER(SUBSTR(word-num,{1} + 2,1)) = 0 THEN "" ELSE
("-" + ENTRY(INTEGER(SUBSTR(word-num,{1} + 2,1)),word-lst))).
{2} = (IF {2} = "" THEN "" ELSE ({2} + " ")) + word-ten.

[/code]
 
Top