Partendo dalla funziona postata da kalosjo apportando un po di modifiche ho creato questa class in asp per trafsormare i numeri in lettere.
Non ha praticamente limiti di numero
viene ripetuto un po di volte miliardi milioni mila.
codice:
class Num2Str
private Numeri_N(19)
private Numeri_D(9)
private Tipo(4)
Private Sub Class_Initialize()
Numeri_N(1) = "uno"
Numeri_N(2) = "due"
Numeri_N(3) = "tre"
Numeri_N(4) = "quattro"
Numeri_N(5) = "cinque"
Numeri_N(6) = "sei"
Numeri_N(7) = "sette"
Numeri_N(8) = "otto"
Numeri_N(9) = "nove"
Numeri_N(10) = "dieci"
Numeri_N(11) = "undici"
Numeri_N(12) = "dodici"
Numeri_N(13) = "tredici"
Numeri_N(14) = "quattordici"
Numeri_N(15) = "quindici"
Numeri_N(16) = "sedici"
Numeri_N(17) = "diciassette"
Numeri_N(18) = "diciotto"
Numeri_N(19) = "diciannove"
'
Numeri_D(1) = "dieci"
Numeri_D(2) = "venti"
Numeri_D(3) = "trenta"
Numeri_D(4) = "quaranta"
Numeri_D(5) = "cinquanta"
Numeri_D(6) = "sessanta"
Numeri_D(7) = "settanta"
Numeri_D(8) = "ottanta"
Numeri_D(9) = "novanta"
Tipo(1)=""
Tipo(2)="mila"
Tipo(3)="milioni"
Tipo(4)="miliardi"
End Sub
Private Sub Class_Terminate()
End Sub
function trasforma(valore)
valore=Replace(valore,",",".")
if InStr (1,valore,".")>0 then
arr=Split(valore,".")
intero=arr(0)
decimale=arr(1)
else
intero=valore
decimale=""
end if
if (len(intero) mod 3<>0) then
intero="00" & intero
end if
dim myarr()
contarr=1
for i=len(intero)-2 to 1 step -3
redim preserve myarr(contarr)
myarr(contarr)=Mid (intero,i,3)
contarr=contarr+1
next
ritorno=""
contTipo=1
for i=1 to ubound(myarr)
if contTipo>4 then contTipo=2
ritorno=Centinaia(myarr(i)) & Tipo(contTipo) & " " & ritorno
contTipo=contTipo+1
next
if decimale<>"" then
ritorno=ritorno & " virgola " & trasforma(decimale)
end if
trasforma=ritorno
end function
public Function Centinaia(Valore)
Dim Centinaio
Dim Lettere1, Lettere2
Centinaio = CLng(Valore \ 100)
Lettere1 = ""
Lettere2 = ""
If Centinaio > 0 Then
If Centinaio = 1 Then
Lettere1 = "cento"
Else
Lettere1 = Numeri_N(Centinaio) & "cento"
End If
End If
Lettere2 = DecineUnita((Valore - (Centinaio * 100)))
Centinaia = Lettere1 & Lettere2
End Function
Private Function DecineUnita(Valore)
Dim Decine, Unita
Dim Lettere1, Lettere2
Decine = Clng(Valore \ 10)
Unita = ((Valore / 10) - Decine) * 10
Lettere1 = ""
Lettere2 = ""
If Valore > 0 Then
If Valore < 20 Then
Lettere1 = Numeri_N(Valore)
Else
Lettere1 = Numeri_D(Decine)
If Unita <> 0 Then
Lettere2 = Numeri_N(Unita)
End If
End If
End If
DecineUnita = Lettere1 & Lettere2
End Function
end class
da richiamare in questo modo
codice:
set clsNum2Str = new Num2Str
valorestr=clsNum2Str.trasforma (valore)
set clsNum2Str = nothing
Response.Write valore & " -> " & valorestr
esempio:
4565465423156.4156 -> quattromila cinquecentosessantacinquemiliardi quattrocentosessantacinquemilioni quattrocentoventitremila centocinquantasei virgola quattromila centocinquantasei
ciao