Domanda c# convertire un numero in lettere.

Pacifico437

Utente Gold
27 Aprile 2012
166
78
6
200
Buongiorno,

riporto il codice che ho modificato funzionante per ottenere la conversione da un numero in lettere. Converte solo numeri interi.
I tentativi fatti con esito negativo per completare anche l'inserimento dei decimali con il punto, la virgola o la barra.

Auguro che possiate suggerire.

Ringrazio anticipatamente fiducioso, saluto.
Domenico.

Codice:
string[] numeri1_19 =  {
         "","uno", "due", "tre", "quattro", "cinque","sei", "sette", "otto", "nove", "dieci", "undici",
            "dodici", "tredici", "quattordici","quindici", "sedici", "diciassette", "diciotto","diciannove" };
        string[] decine = { "", "", "venti", "trenta","quaranta", "cinquanta", "sessanta", "settanta", "ottanta", "novanta" };
        string[] centinaia = { "", "cento", "duecento", "trecento","quattrocento", "cinquecento", "seicento","settecento", "ottocento",  novecento" };
   int[] v = new int[8];
        
        private void TextBox_KeyPress(object sender, KeyPressEventArgs e       
if (e.KeyChar == 13 && TextBox.Text != "")
   {
       Btn_Converti_Click(sender, e);
    }
if (char.IsDigit(e.KeyChar))
    {
       string temp = TextBox.Text + e.KeyChar.ToString();
 if (Convert.ToInt32(temp) >= 0) return;
    }
       e.KeyChar = (char)0;
    }

private void Btn_Converti_Click(object sender, EventArgs e)
{
  Label3.Text = (convertiinlettere(Convert.ToInt32(TextBox.Text)));       
}

string convertiinlettere (int num)
{
  if(num<20) return numeri1_19[num];
     int nc = 0;
     int temp = num;
     while (temp > 0)
{
   temp /= 10;
   nc++;
}
  temp=num;
  int cifra;
for(int i=nc;i!=0;i--)
{
  cifra=(int)(temp/Math.Pow(10,i-1));
  temp-=(int) (cifra*Math.Pow(10,i-1));
   v[i-1]=cifra;       
 }
 string mila,milioni;
  switch(nc)
{
   case(2): //decine-unità
   return Dec_uni(v[1],v[0]);
    case(3)://centinaia-decine-unità
   return centinaia[v[2]]+Dec_uni(v[1],v[0]);
            case(4)://migliaia-centinaia-decine-unità
                if(num<2000) return "mille"+centinaia[v[2]]+Dec_uni(v[1],v[0]);   
                return numeri1_19[v[3]]+"mila"+centinaia[v[2]]+Dec_uni(v[1],v[0]);
            case(5)://decine di migliaia-centinaia-decine-unità
                return Dec_uni(v[4],v[3])+"mila"+centinaia[v[2]]+Dec_uni(v[1],v[0]);
            case(6)://centinaia di migliaia-centinaia-decine-unità
                return centinaia[v[5]]+Dec_uni(v[4],v[3])+"mila"+centinaia[v[2]]+Dec_uni(v[1],v[0]);
            case (7)://milioni-migliaia_centinaia-decine-unità
                milioni = numeri1_19[v[6]] + "milioni";
                if (v[6] == 1) milioni = "unmilione";
                mila = centinaia[v[5]] + Dec_uni(v[4], v[3]) + "mila";
                if (v[5] == 0 && v[4] == 0 && v[3] == 0) mila = "";
                if (v[5] == 0 && v[4] == 0 && v[3] == 1) mila = "mille";
                return milioni + mila + centinaia[v[2]] + Dec_uni(v[1], v[0]);
            case (8)://decine di milioni-migliaia-centinaia-decine-unità
                milioni = Dec_uni(v[7], v[6]) + "milioni";
                mila = centinaia[v[5]] + Dec_uni(v[4], v[3]) + "mila";
                if (v[5] == 0 && v[4] == 0 && v[3] == 0) mila = "";
                if (v[5] == 0 && v[4] == 0 && v[3] == 1) mila = "mille";
                return milioni + mila + centinaia[v[2]] + Dec_uni(v[1], v[0]);
            default:
                return "";
  }         
}
 
Buongiorno,

riporto il codice che ho modificato funzionante per ottenere la conversione da un numero in lettere. Converte solo numeri interi.
I tentativi fatti con esito negativo per completare anche l'inserimento dei decimali con il punto, la virgola o la barra.

Auguro che possiate suggerire.

Ringrazio anticipatamente fiducioso, saluto.
Domenico.

Codice:
string[] numeri1_19 =  {
         "","uno", "due", "tre", "quattro", "cinque","sei", "sette", "otto", "nove", "dieci", "undici",
            "dodici", "tredici", "quattordici","quindici", "sedici", "diciassette", "diciotto","diciannove" };
        string[] decine = { "", "", "venti", "trenta","quaranta", "cinquanta", "sessanta", "settanta", "ottanta", "novanta" };
        string[] centinaia = { "", "cento", "duecento", "trecento","quattrocento", "cinquecento", "seicento","settecento", "ottocento",  novecento" };
   int[] v = new int[8];
       
        private void TextBox_KeyPress(object sender, KeyPressEventArgs e      
if (e.KeyChar == 13 && TextBox.Text != "")
   {
       Btn_Converti_Click(sender, e);
    }
if (char.IsDigit(e.KeyChar))
    {
       string temp = TextBox.Text + e.KeyChar.ToString();
 if (Convert.ToInt32(temp) >= 0) return;
    }
       e.KeyChar = (char)0;
    }

private void Btn_Converti_Click(object sender, EventArgs e)
{
  Label3.Text = (convertiinlettere(Convert.ToInt32(TextBox.Text)));      
}

string convertiinlettere (int num)
{
  if(num<20) return numeri1_19[num];
     int nc = 0;
     int temp = num;
     while (temp > 0)
{
   temp /= 10;
   nc++;
}
  temp=num;
  int cifra;
for(int i=nc;i!=0;i--)
{
  cifra=(int)(temp/Math.Pow(10,i-1));
  temp-=(int) (cifra*Math.Pow(10,i-1));
   v[i-1]=cifra;      
 }
 string mila,milioni;
  switch(nc)
{
   case(2): //decine-unità
   return Dec_uni(v[1],v[0]);
    case(3)://centinaia-decine-unità
   return centinaia[v[2]]+Dec_uni(v[1],v[0]);
            case(4)://migliaia-centinaia-decine-unità
                if(num<2000) return "mille"+centinaia[v[2]]+Dec_uni(v[1],v[0]);  
                return numeri1_19[v[3]]+"mila"+centinaia[v[2]]+Dec_uni(v[1],v[0]);
            case(5)://decine di migliaia-centinaia-decine-unità
                return Dec_uni(v[4],v[3])+"mila"+centinaia[v[2]]+Dec_uni(v[1],v[0]);
            case(6)://centinaia di migliaia-centinaia-decine-unità
                return centinaia[v[5]]+Dec_uni(v[4],v[3])+"mila"+centinaia[v[2]]+Dec_uni(v[1],v[0]);
            case (7)://milioni-migliaia_centinaia-decine-unità
                milioni = numeri1_19[v[6]] + "milioni";
                if (v[6] == 1) milioni = "unmilione";
                mila = centinaia[v[5]] + Dec_uni(v[4], v[3]) + "mila";
                if (v[5] == 0 && v[4] == 0 && v[3] == 0) mila = "";
                if (v[5] == 0 && v[4] == 0 && v[3] == 1) mila = "mille";
                return milioni + mila + centinaia[v[2]] + Dec_uni(v[1], v[0]);
            case (8)://decine di milioni-migliaia-centinaia-decine-unità
                milioni = Dec_uni(v[7], v[6]) + "milioni";
                mila = centinaia[v[5]] + Dec_uni(v[4], v[3]) + "mila";
                if (v[5] == 0 && v[4] == 0 && v[3] == 0) mila = "";
                if (v[5] == 0 && v[4] == 0 && v[3] == 1) mila = "mille";
                return milioni + mila + centinaia[v[2]] + Dec_uni(v[1], v[0]);
            default:
                return "";
  }        
}
Mofifica la funzione gli passi un float cosi "string convertiinlettere (int num, float parte_decimale)" e dopo lo switch controlli se parte_decimale != 0 gli aggiungi alla stringa di output "virgola numero numero ecc.."
 
Gent.mo Insidehackers,

ringrazio della gentilezza e disponibilità.

Ho eseguito la modifica consigliata con esito negativo che segna in rosso: "(string convertiinlettere(int num, float parte_decimale));".

Chiedo una cortesia se invio il file zippato può visionarlo?

Grato, saluto.
Domenico.
 
Gent.mo Insidehackers,

mi scuso e sono mortificato per il fastidio.
Al momento non sono riuscito. Faresti cosa grata se puoi inviare il file corretto.
Ringrazio per la gradita collaborazione, rinnovo le scuse e fiducioso, saluto.
Domenico.