martedì 6 maggio 2025

C# estendere la classe decimal con un metodo per convertire l'importo euro in lettere

In questo esempio di codice, vedremo nel linguaggio di programmazione C#, come estendere la classe "decimal", con un metodo per convertire un valore di tipo euro, in lettere.

Può tornare utile visualizzare il testo di un importo euro.


Di seguito si riporta la classe che permette di estendere la classe "decimal" con un metodo denominato "ConvertiEuroInLettere" per convertire il valore in testo.


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(this 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 relativo utilizzo.
C#

decimal numer = decimal.Parse("1875,23");

string risultato =  numer.ConvertiEuroInLettere();


Nessun commento: