domenica 27 aprile 2025

C# convertire un importo euro in lettere

Il frammento di codice qui di seguito, illustra una tecnica di come convertire un importo di euro (con centesimi) in lettere.
Supponiamo di avere 1875,23 euro, verrà restituito "milleottocentosettantacinque euro e ventitre centesimi."



Di seguito si riporta la classe che permette di convertire l'importo euro in lettere, con l'opzione del parametro per indicare se anche i centesimi vanno tradotti in lettere oppure no.


Classe:

C#

public static class EuroInLettere

{

    private static readonly string[] Unita = { "zero", "uno", "due", "tre", "quattro", "cinque", "sei", "sette", "otto", "nove" };

    private static readonly string[] Decine = { "", "dieci", "venti", "trenta", "quaranta", "cinquanta", "sessanta", "settanta", "ottanta", "novanta" };

    private static readonly string[] DecineSpeciali = { "dieci", "undici", "dodici", "tredici", "quattordici", "quindici", "sedici", "diciassette", "diciotto", "diciannove" };

 

    public static string ConvertiEuroInLettere(decimal importo, bool centesimiTesto = false)

    {

        if (importo == 0)

            return "zero euro";

 

        string euroParte = ConvertiNumeroInLettere((long)importo);

        int centesimiParte = (int)((importo - Math.Floor(importo)) * 100);

        if(centesimiTesto==false)

            return $"{euroParte} euro /{centesimiParte:00}";

        else

        {

            //tutto lettere

            string   centesimiParteTesto = ConvertiNumeroInLettere((long)((importo - Math.Floor(importo)) * 100));

 

            return $"{euroParte} euro e {centesimiParteTesto} centesimi";

        }

 

    }

 

    private static string ConvertiNumeroInLettere(long numero)

    {

        if (numero < 10)

            return Unita[numero];

        if (numero < 20)

            return DecineSpeciali[numero - 10];

        if (numero < 100)

            return Decine[numero / 10] + (numero % 10 > 0 ? Unita[numero % 10] : "");

        if (numero < 1000)

            return (numero / 100 == 1 ? "cento" : Unita[numero / 100] + "cento") + (numero % 100 > 0 ? ConvertiNumeroInLettere(numero % 100) : "");

        if (numero < 1000000)

            return (numero / 1000 == 1 ? "mille" : ConvertiNumeroInLettere(numero / 1000) + "mila") + (numero % 1000 > 0 ? ConvertiNumeroInLettere(numero % 1000) : "");

        if (numero < 1000000000)

            return (numero / 1000000 == 1 ? "un milione" : ConvertiNumeroInLettere(numero / 1000000) + " milioni") + (numero % 1000000 > 0 ? ConvertiNumeroInLettere(numero % 1000000) : "");

 

        return (numero / 1000000000 == 1 ? "un miliardo" : ConvertiNumeroInLettere(numero / 1000000000) + " miliardi") + (numero % 1000000000 > 0 ? ConvertiNumeroInLettere(numero % 1000000000) : "");

    }

}





Di seguito il frammento di codice del relativo utilizzo:

C#

  string testoConvertito  = EuroInLettere.ConvertiEuroInLettere(decimal.Parse(numero), true);

Nessun commento: