giovedì 31 luglio 2025

C# extend the decimal class with a method to convert euros to letters

In questo esempio di codice nel linguaggio C#, permette di estendere la classe "decimal" con un metodo per convertire l'importo euro in lettere.


Di seguito si riporta la classe statica per estendere la classe "decimal".


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 si riporta il relativo utilizzo.


C#

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

string risultato =  numer.ConvertiEuroInLettere();


Nessun commento: