Piccola modifica per utenti italiani
Ciao Marino
#include 'minigui.ch'
Function Main( )
MsgInfo( N2L (1) )
RETURN NIL
Function N2L (Numero)
Local nMaximo
Local aUnidad, aDecena, aCentena, aResto
Local nUnidad, nDecena, nCentena, nResto
Local C, R
Local I, J
nMaximo = 18
aUnidad = {"uno", "due", "tre", "quattro", "cinque", "sei", "sette", "otto", "nove"}
aDecena = {"dieci", "venti", "trenta", "quaranta", "cinquanta","sessanta", "settanta","ottanta","novanta"}
aCentena = {"cento","duecento","trecento","quattrocento","cinquecento","seicento","settecento","ottocento","novecento"}
aResto = {"undici", "dodici", "tredici", "quattordici", "quindici",'sedici','diciasette','diciotto','diciannove'}
// Es más fácil romper el número en pedazos de cadena.
C = Left (Str (Numero, nMaximo, 2), nMaximo - 3)
Numero = Val (C)
R = ""
If Numero = 0
R = "zero"
Else
I = 0
Do While .T.
J = 0
Do While .T.
If (J > 0) .And. (Mod (Numero, 1000) > 0)
R = "mila " + R
EndIf
nUnidad = Mod (Numero, 10)
nDecena = INT (Mod (Numero, 100) / 10)
nResto = Mod (Numero, 100) - 10
If nResto > 0 .And. nResto < 10
R = aResto [nResto] + " " + R
Else
If nUnidad > 0
R = aUnidad [nUnidad] + " " + R
EndIf
If nDecena > 0
Do Case
Case nDecena = 1 .And. nUnidad > 5
R = "dieci" + R
Case nDecena = 2 .And. nUnidad > 0
R = "venti" + R
Otherwise
If nUnidad > 0
R = " " + R
EndIf
R = aDecena [nDecena] + " " + R
EndCase
EndIf
EndIf
nCentena = INT (Mod (Numero, 1000) / 100)
If nCentena > 0
If (nCentena == 1) .And. (Mod (Numero, 100) = 0)
R = "cento " + R
Else
R = aCentena [nCentena] + " " + R
EndIf
EndIf
Numero = Int (Numero / 1000)
If Numero > 0
J++
If J > 1
Exit
EndIf
Else
Exit
EndIf
EndDo
If Numero > 0
I++
If Mod (Numero, 1000000) > 0
R = " " + R
If Numero > 1
R = "ES" + R
EndIf
Do Case
Case I = 1
R = "milioni" + R
Case I = 2
R = "bilioni" + R
Case I = 3
R = "trilioni" + R
OtherWise
Exit
EndCase
EndIf
Else
Exit
EndIf
EndDo
EndIf
if substr(r,1,8) = 'uno mila'
r = atrepl('uno mila',r,'mille')
endif
Return R
NumToLett (Numero in lettere)
Moderator: Rathinagiri