Sub NumeroInLettere(dNum As Double) As String
Dim Num As Long = NumberFormat2(dNum,1,0,0,False)
Dim dDec As Double = NumberFormat2(dNum-Num,1,2,2,False)
Dim sAppo As String = dDec
Dim sDec As String
If dDec=0 Then
sDec = "/00"
Else
sDec = "/" & sAppo.SubString(2)
End If
If Num = 0 Then
Return "zero"
End If
Dim parti() As String = Array As String("", "MILA", "MILIONI", "MILIARDI")
Dim risultato As String = ""
Dim parteNumero As Long
Dim indiceParte As Int = 0
Do While Num > 0
parteNumero = Num Mod 1000
If parteNumero > 0 Then
If indiceParte = 1 And parteNumero = 1 Then
risultato = "mille" & risultato
Else
risultato = ConvertiCento(parteNumero) & parti(indiceParte) & risultato
End If
End If
Num = Num / 1000
indiceParte = indiceParte + 1
Loop
risultato = risultato & sDec
Return risultato.Trim
End Sub
Sub ConvertiCento(num As Int) As String
Dim unita() As String = Array As String("", "UNO", "DUE", "TRE", "QUATTRO", "CINQUE", "SEI", "SETTE", "OTTO", "NOVE")
Dim speciali() As String = Array As String("DIECI", "UNDICI", "DODICI", "TREDICI", "QUATTORDICI", "QUINDICI", "SEDICI", "DICIASSETTE", "DICIOTTO", "DICIANNOVE")
Dim decine() As String = Array As String("", "", "VENTI", "TRENTA", "QUARANTA", "CINQUANTA", "SESSANTA", "SETTANTA", "OTTANTA", "NOVANTA")
Dim centinaia() As String = Array As String("", "CENTO", "DUECENTO", "TRECENTO", "QUATTROCENTO", "CINQUECENTO", "SEICENTO", "SETTECENTO", "OTTOCENTO", "NOVECENTO")
Dim nUnita As Int = num Mod 10
Dim nDecine As Int = (num / 10) Mod 10
Dim nCentinaia As Int = num / 100
Dim risultato As String = ""
risultato = centinaia(nCentinaia)
If nDecine = 1 Then ' Numeri tra 10 e 19
risultato = risultato & speciali(nUnita)
Else
risultato = risultato & decine(nDecine)
If nUnita > 0 Then
risultato = risultato & unita(nUnita)
End If
End If
Return risultato
End Sub