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) : "");
}
}
decimal numer = decimal.Parse("1875,23");
string risultato =
numer.ConvertiEuroInLettere();
Nessun commento:
Posta un commento