[[https://www.revelation.com/|Sign up on the Revelation Software website to have access to the most current content, and to be able to ask questions and get answers from the Revelation community]] ==== Converting numbers to words (OpenInsight Specific) ==== === At 10 NOV 1998 06:00:37AM Jacob Ignatius wrote: === {{tag>"OpenInsight Specific"}} I think its unlikely but is there a function that converts numbers to words (e.g. '3' to 'three')? That would save me a bit of programming. One way of approaching this is building strings of words ('one...ten', 'twenty one...thirty',etc). Then using the number (two digits) find the corresponding word in the appropriate string. When the number is three digits the word will have to be prefixed with 'one hundred and' or 'three hundred and', etc. Likewise for numbers 4 digits in length. ---- === At 10 NOV 1998 09:03AM Dave Pociu wrote: === Jacob, Here's a function I wrote a while ago to spell integers. From here you can probably extrapolate to decimals. (if you do that, please post the code for it back in this discussion forum) function spellnumber(number) *** *** 5/2/96 by D. Pociu *** *** Spells out an integer. Max integer is 99999 equ basic to "zero one two three four five six seven eight nine ten eleven twelve thirteen fourteen fifteen sixteen seventeen eighteen nineteen" equ tens to "zero ten twenty thirty fourty fifty sixty seventy eighty ninety" spell=' if not(num(number)) then return spell end number=int(number) if number 5 return '' case l=5 suffix=thousand' num=2 ;** shave off first 2 digits case l=4 suffix=thousand' num=1 ;** shave off first digit case l=3 suffix=hundred' num=1 ;*** shave off one digit case l=1 or l=2 suffix=' num=l case 1 return '' end case digit=number1,num number=numbernum+1,999 gosub spell_it goto start spell_it: if (spell and spell-1,1 # ' ') then spell := " " if digit=0 and spell # '' then return begin case case digit ]= 0 and digit :" ":suffix case digit ]= 20 and digit :" ":suffix end else spell := tens:" ":basic:" ":suffix end case 1 spell=' end case return ---- === At 10 NOV 1998 10:29AM Jacob Ignatius wrote: === It works like a dream! Thanks Dave. ---- === At 03 DEC 1998 07:40PM W.M. Collins wrote: === I did a re-write to R83 using your (D.Pociu) concept. Should be usable/adaptable to the AREV. Program was also posted to comp.databases.pick. * SUBROUTINE SPELL(NUMBER,SPELL,CENTS) * FUNCTION SPELLNUMBER(NUMBER) *** *** 5/2/96 CONCEPT BY D. POCIU IN AREV *** 12/98 MODIFIED TO R83 BY W.M. COLLINS *** SPELLS OUT AN INTEGER. MAX INTEGER IS 99999 * DIM BASIC(19),TENS(9) BASIC(1)=one" ;BASIC(10)=ten" BASIC(2)=two" ;BASIC(11)=eleven" BASIC(3)=three" ;BASIC(12)=twelve" BASIC(4)=four" ;BASIC(13)=thirteen" BASIC(5)=five" ;BASIC(14)=fourteen" BASIC(6)=six" ;BASIC(15)=fifteen" BASIC(7)=seven" ;BASIC(16)=sixteen" BASIC(8)=eight" ;BASIC(17)=seventeen" BASIC(9)=nine" ;BASIC(18)=eighteen" BASIC(19)=nineteen" ;TENS(1)=ten" TENS(2)=twenty" ;TENS(6)=sixty" TENS(3)=thirty" ;TENS(7)=seventy" TENS(4)=fourty" ;TENS(8)=eighty" TENS(5)=fifty" ;TENS(9)=ninety" 1* GOSUB 5 RETURN STOP * 5 SPELL=' CENTS=FIELD(NUMBER,'.',2) IF NOT(NUM(NUMBER)) THEN RETURN END NUMBER=INT(NUMBER) IF NUMBER 5 RETURN CASE L=5 DIGIT1=NUMBER1,1 DIGIT2=NUMBER2,1 DIGIT3=NUMBER3,1 DIGIT4=NUMBER4,1 DIGIT5=NUMBER5,1 * CASE L=4 DIGIT1=NUMBER1,1 DIGIT2=NUMBER2,1 DIGIT3=NUMBER3,1 DIGIT4=NUMBER4,1 * CASE L=3 DIGIT1=NUMBER1,1 DIGIT2=NUMBER2,1 DIGIT3=NUMBER3,1 * CASE L=1 OR L=2 DIGIT1=NUMBER1,1 DIGIT2=NUMBER2,1 CASE 1 RETURN END CASE * *NUMBER=NUMBERNUM+1,999 GOSUB 50 RETURN GOTO 1 * 50* IF (SPELL AND SPELL-1,1 # ' ') THEN SPELL=SPELL:" " IF DIGIT1=0 AND SPELL # '' THEN RETURN BEGIN CASE CASE L=5 SUFFIX= thousand " SPELL=TENS(DIGIT1) IF DIGIT2 ] 0 THEN SPELL=SPELL:BASIC(DIGIT2):" ":SUFFIX END ELSE SPELL=SPELL:" ":SUFFIX END SUFFIX= hundred " IF DIGIT3 ] 0 THEN SPELL=SPELL:BASIC(DIGIT3):" ":SUFFIX END ELSE SPELL=SPELL ;*:" ":SUFFIX END IF DIGIT4 ] 0 THEN SPELL=SPELL:TENS(DIGIT4) END ELSE SPELL=SPELL END IF DIGIT5 ] 0 THEN SPELL=SPELL:BASIC(DIGIT5) END ELSE SPELL=SPELL END CASE 1 END CASE * BEGIN CASE CASE L=4 SUFFIX= Thousand " SPELL=BASIC(DIGIT1):SUFFIX SUFFIX= Hundred " IF DIGIT2 ] 0 THEN SPELL=SPELL:BASIC(DIGIT2):" ":SUFFIX END ELSE SPELL=SPELL END IF DIGIT3:DIGIT4 0 THEN SPELL=SPELL:TENS(DIGIT3) END ELSE SPELL=SPELL END IF DIGIT4 ] 0 THEN SPELL=SPELL:BASIC(DIGIT4) END ELSE SPELL=SPELL END 52* CASE 1 END CASE * BEGIN CASE CASE L=3 SUFFIX= Hundred " SPELL=BASIC(DIGIT1):SUFFIX IF DIGIT2:DIGIT3 0 THEN SPELL=SPELL:TENS(DIGIT2) END ELSE SPELL=SPELL END IF DIGIT3 ] 0 THEN SPELL=SPELL:BASIC(DIGIT3) END ELSE SPELL=SPELL END 54* CASE 1 END CASE * BEGIN CASE CASE L=2 IF DIGIT1:DIGIT2 0 THEN SPELL=SPELL:TENS(DIGIT1) SPELL=SPELL:BASIC(DIGIT2) END ELSE SPELL=SPELL:TENS(DIGIT1) END 55* CASE 1 END CASE * BEGIN CASE CASE L=1 SPELL=BASIC(DIGIT1) CASE 1 END CASE * PRINT 'ANS= ':SPELL:" and ":CENTS:"/100" RETURN END ---- === At 06 DEC 1998 06:33PM W.M. Collins wrote: === Here is a revised version of the code. No goto's. Runs smoother. Enjoy. WMC SUBROUTINE SPELLIT(NUMBER,SPELL,CENTS) *** *** 5/2/96 CONCEPT BY D. POCIU IN AREV *** 12/06/98 MODIFIED TO R83 BY W.M. COLLINS *** SPELLS OUT AN INTEGER. MAX INTEGER IS 99999 * DIM BASIC(19),TENS(9) BASIC(1)=one" ;BASIC(10)=ten" BASIC(2)=two" ;BASIC(11)=eleven" BASIC(3)=three" ;BASIC(12)=twelve" BASIC(4)=four" ;BASIC(13)=thirteen" BASIC(5)=five" ;BASIC(14)=fourteen" BASIC(6)=six" ;BASIC(15)=fifteen" BASIC(7)=seven" ;BASIC(16)=sixteen" BASIC(8)=eight" ;BASIC(17)=seventeen" BASIC(9)=nine" ;BASIC(18)=eighteen" BASIC(19)=nineteen" ;TENS(1)=ten" TENS(2)=twenty" ;TENS(6)=sixty" TENS(3)=thirty" ;TENS(7)=seventy" TENS(4)=fourty" ;TENS(8)=eighty" TENS(5)=fifty" ;TENS(9)=ninety" 1* GOSUB 5 RETURN STOP * 5 SPELL=" CENTS=FIELD(NUMBER,'.',2) IF NOT(NUM(NUMBER)) THEN RETURN END NUMBER=INT(NUMBER) IF NUMBER 5 RETURN CASE L=5 DIGIT1=NUMBER1,1 DIGIT2=NUMBER2,1 DIGIT3=NUMBER3,1 DIGIT4=NUMBER4,1 DIGIT5=NUMBER5,1 * CASE L=4 DIGIT1=NUMBER1,1 DIGIT2=NUMBER2,1 DIGIT3=NUMBER3,1 DIGIT4=NUMBER4,1 * CASE L=3 DIGIT1=NUMBER1,1 DIGIT2=NUMBER2,1 DIGIT3=NUMBER3,1 * CASE L=1 OR L=2 DIGIT1=NUMBER1,1 DIGIT2=NUMBER2,1 CASE 1 RETURN END CASE * GOSUB 50 RETURN * 50* IF (SPELL AND SPELL-1,1 # ' ') THEN SPELL=SPELL:" " IF DIGIT1=0 AND SPELL # '' THEN RETURN BEGIN CASE CASE L=5 SUFFIX= thousand " SPELL=TENS(DIGIT1) IF DIGIT2 ] 0 THEN SPELL=SPELL:BASIC(DIGIT2):" ":SUFFIX END ELSE SPELL=SPELL:" ":SUFFIX END SUFFIX= hundred " IF DIGIT3 ] 0 THEN SPELL=SPELL:BASIC(DIGIT3):" ":SUFFIX END ELSE SPELL=SPELL ;*:" ":SUFFIX END IF DIGIT4:DIGIT5 ] 0 AND DIGIT4:DIGIT5 0 THEN SPELL=SPELL:TENS(DIGIT4) END ELSE SPELL=SPELL END IF DIGIT5 ] 0 THEN SPELL=SPELL:BASIC(DIGIT5) END ELSE SPELL=SPELL END CASE 1 END CASE * BEGIN CASE CASE L=4 SUFFIX= Thousand " SPELL=BASIC(DIGIT1):SUFFIX SUFFIX= Hundred " IF DIGIT2 ] 0 THEN SPELL=SPELL:BASIC(DIGIT2):" ":SUFFIX END ELSE SPELL=SPELL END IF DIGIT3:DIGIT4 ] 0 AND DIGIT3:DIGIT4 0 THEN SPELL=SPELL:TENS(DIGIT3) END ELSE SPELL=SPELL END IF DIGIT4 ] 0 THEN SPELL=SPELL:BASIC(DIGIT4) END ELSE SPELL=SPELL END CASE 1 END CASE * BEGIN CASE CASE L=3 SUFFIX= Hundred " SPELL=BASIC(DIGIT1):SUFFIX IF DIGIT2:DIGIT3 ] 0 AND DIGIT2:DIGIT3 0 THEN SPELL=SPELL:TENS(DIGIT2) END ELSE SPELL=SPELL END IF DIGIT3 ] 0 THEN SPELL=SPELL:BASIC(DIGIT3) END ELSE SPELL=SPELL END CASE 1 END CASE * BEGIN CASE CASE L=2 IF DIGIT2 ] 0 THEN SPELL=SPELL:TENS(DIGIT1) SPELL=SPELL:BASIC(DIGIT2) END ELSE SPELL=SPELL:TENS(DIGIT1) END IF DIGIT1:DIGIT2 ] 0 AND DIGIT1:DIGIT2 < 20 THEN SPELL=BASIC(DIGIT1:DIGIT2) DIGIT2=0 END CASE 1 END CASE * BEGIN CASE CASE L=1 SPELL=BASIC(DIGIT1) CASE 1 END CASE * CRT 'ANS= ':SPELL:" and ":CENTS:"/100" RETURN END [[https://www.revelation.com/revweb/oecgi4p.php/O4W_HANDOFF?DESTN=O4W_RUN_FORM&INQID=NONWORKS_READ&SUMMARY=1&KEY=CB9F51017445F1A7852566B8003C7B90|View this thread on the forum...]]