[[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...]]