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

At 10 NOV 1998 06:00:37AM Jacob Ignatius wrote:

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

View this thread on the forum...

  • third_party_content/community/commentary/forums_nonworks/cb9f51017445f1a7852566b8003c7b90.txt
  • Last modified: 2023/12/28 07:40
  • by 127.0.0.1