Dim label_unita(20) As String
    Dim label_decine(10) As String
    Public Function toLetters(ByVal euro As Double) As String
        label_unita(1) = "uno"
        label_unita(2) = "due"
        label_unita(3) = "tre"
        label_unita(4) = "quattro"
        label_unita(5) = "cinque"
        label_unita(6) = "sei"
        label_unita(7) = "sette"
        label_unita(8) = "otto"
        label_unita(9) = "nove"
        label_unita(10) = "dieci"
        label_unita(11) = "undici"
        label_unita(12) = "dodici"
        label_unita(13) = "tredici"
        label_unita(14) = "quattordici"
        label_unita(15) = "quindici"
        label_unita(16) = "sedici"
        label_unita(17) = "diciassette"
        label_unita(18) = "diciotto"
        label_unita(19) = "diciannove"
        label_decine(1) = "dieci"
        label_decine(2) = "venti"
        label_decine(3) = "trenta"
        label_decine(4) = "quaranta"
        label_decine(5) = "cinquanta"
        label_decine(6) = "sessanta"
        label_decine(7) = "settanta"
        label_decine(8) = "ottanta"
        label_decine(9) = "novanta"

        Dim StrIntero As String = MilioniMigliaia(Int(euro))
        Dim decimali As Integer = CInt(Decimal.Subtract(euro, Decimal.Truncate(euro)) * 100)

        toLetters = StrIntero
        If Not toLetters = "Numero troppo grande" Then
            toLetters = toLetters & "/"
            If decimali = 0 Then
                toLetters &= "00"
            Else
                toLetters &= decimali
            End If
            toLetters = UCase(Left(toLetters, 1)) & Right(toLetters, Len(toLetters) - 1)
            toLetters = Replace(toLetters, "tau", "tu")
            toLetters = Replace(toLetters, "tao", "to")
            toLetters = Replace(toLetters, "too", "to")
            toLetters = Replace(toLetters, "tio", "to")
        End If
    End Function

    Private Function Centinaia(ByVal Numero As Double) As String
        Dim NumCentinaia As Integer
        Dim StrCentinaia As String = ""

        NumCentinaia = Int(Numero / 100)
        If NumCentinaia > 0 Then
            If NumCentinaia = 1 Then
                StrCentinaia = "cento"
            Else
                StrCentinaia = label_unita(NumCentinaia) & "cento"
            End If
        End If
        Centinaia = StrCentinaia & DecineUnita(Numero - (NumCentinaia * 100))
    End Function

    Private Function DecineUnita(ByVal Numero As Double) As String
        Dim Decine As String
        Dim Unita As Integer

        If Numero = 0 Then
            DecineUnita = ""
        Else
            If Numero < 20 Then
                DecineUnita = label_unita(Numero)
            Else
                Decine = label_decine(Int(Numero / 10))
                Unita = Numero Mod 10
                If Unita = 0 Then
                    DecineUnita = Decine
                Else
                    DecineUnita = Decine & label_unita(Unita)
                End If
            End If
        End If
    End Function

    Private Function MilioniMigliaia(ByVal Numero As Double) As String
        Dim Assoluto As Double
        Dim NumMilioni As Double
        Dim Milioni As String
        Dim Var1 As Double
        Dim NumMigliaia As Double
        Dim Migliaia As String = ""

        If Numero > 999999999 Then
            MilioniMigliaia = "Numero troppo grande"
            Exit Function
        End If

        Assoluto = Int(Numero)
        NumMilioni = Int(Assoluto / 1000000)
        If NumMilioni = 0 Then
            Milioni = ""
        ElseIf NumMilioni = 1 Then
            Milioni = "unmilione"
        Else
            Milioni = Centinaia(NumMilioni) & "milioni"
        End If
        Var1 = Assoluto Mod 1000000
        NumMigliaia = Int(Var1 / 1000)
        If NumMigliaia = 1 Then
            Migliaia = "mille"
        Else
            If NumMigliaia <> 0 Then Migliaia = Centinaia(NumMigliaia) & "mila"
        End If
        MilioniMigliaia = Milioni & Migliaia & Centinaia(Var1 Mod 1000)
    End Function