Problemi conversione numeri in lettere

martedì 11 novembre 2014 - 09.33

adachigahara Profilo | Newbie

salve a tutti.. spero che mi possiade dare una mano e ch esono nella sezione giusta (in caso contrario mi scuso anticipatamente).. ho questo codice :

public class diconsi
{
// DICONSI EURO
public String Diconsi(String numero_in)
{
String decimale_stringa = "";

if (numero_in.Length > 2)
{
decimale_stringa = numero_in.Substring(numero_in.Length - 2,2);
numero_in = numero_in.Replace(',', '.');
double numero = (Convert.ToDouble(numero_in)) / 100;
int intero = (int)numero;
String test = NumberToText(intero);
return test + "/" + decimale_stringa;
}
else
{
if (numero_in.Length > 1)
{
return "zero/" + numero_in;
}
if (numero_in.Length == 1)
{
return "zero/0" + numero_in;
}

}
return "";

}

// CONVERSIONE DA NUMERO A TESTO
public String NumberToText(int n)
{
if (n < 0)
{
return "meno" + NumberToText(-n);
}
else if (n == 0)
{
return "";
}
else if (n <= 19)
{
return new String[]{"uno", "due", "tre", "quattro", "cinque",
"sei", "sette", "otto", "nove", "dieci", "undici",
"dodici", "tredici", "quattordici", "quindici", "sedici",
"diciasette", "diciotto", "diciannove"}[n - 1] + "";
}
else if (n <= 99)
{
String num_successivo = NumberToText(n % 10);
if (num_successivo.Equals(""))
{
return new String[]{"venti", "trenta", "quaranta",
"cinquanta", "sessanta", "settanta", "ottanta",
"novanta"}[n / 10 - 2] + "" + num_successivo;
}
char c = Convert.ToChar(num_successivo.Substring(0, 1));

if (vocale(c))
{
return new String[]{"vent", "trent", "quarant", "cinquant",
"sessant", "settant", "ottant", "novant"}[n / 10 - 2] + "" + num_successivo;
}
else
{
return new String[]{"venti", "trenta", "quaranta",
"cinquanta", "sessanta", "settanta", "ottanta",
"novanta"}[n / 10 - 2] + "" + num_successivo;
}
}
else if (n <= 199)
{
return "cento" + NumberToText(n % 100);
}
else if (n <= 999)
{
return NumberToText(n / 100) + "cento" + NumberToText(n % 100);
}
else if (n <= 1999)
{
return "mille" + NumberToText(n % 1000);
}
else if (n <= 999999)
{
return NumberToText(n / 1000) + "mila" + NumberToText(n % 1000);
}
else if (n <= 1999999)
{
return "unmilione" + NumberToText(n % 1000000);
}
else if (n <= 999999999)
{
return NumberToText(n / 1000000) + "milioni" + NumberToText(n % 1000000);
}
else if (n <= 1999999999)
{
return "unmiliardo" + NumberToText(n % 1000000000);
}
else
{
return NumberToText(n / 1000000000) + "miliardi" + NumberToText(n % 1000000000);
}

}

private bool vocale(char c)
{
if ((c == 'a') || (c == 'e') || (c == 'i') || (c == 'o') || (c == 'u'))
{
return true;
}

return false;

}

non riesco a capire perche' quando ci sono piu' di due cifre dopo la virgola mi converte la cifra errata, cioe' per spiegarmi ho 243,2456 me lo converte in ventiquattromilatrecentoventiquattro/56.
Mentre quando ho 133,24 me lo converte in centoventitre/,4.
Spero che mi possiade dare una mano.. vi ringrazio anticipatamente

pieroalampi Profilo | Expert

hai provato a fare il contrario di numero_in = numero_in.Replace(',', '.');
e cioe
numero_in = numero_in.Replace('.', ',');
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
LA PRIMA FRASE DI UN PROGRAMMATORE HELLO WORD ...... ANCHE L'ULTIMA

adachigahara Profilo | Newbie

grazieee... incredibile..che errore banale che ho fatto scusami ma sono alle prime armi, rivedevo il codice cento volte cercando di cambiare sempre qualcosa e nn mi sono mai accorto che bastava solo cambiare i segni come mi hai segnalato tu, un'ultima cosa ora e' perfetto.. cioe' 2345,1234 me lo converte in duemilatrecentoquarantacinque/34 ... come posso farlo arrotondare a /13 o fargli scrivere solo /12.

pieroalampi Profilo | Expert

questo è un altro problema prova questa istruzione
Dim totale As Double = Math.Round(imponibile + contoiva, 2), per essere più preciso:
http://msdn.microsoft.com/it-it/library/system.math.round(v=vs.110).aspx
e l'arrotondamento avverà in base ai decimali

in ogni caso dato che il post in oggetto è chiuso perché risolto clicca su accetta, il resto lo vediamo

~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
LA PRIMA FRASE DI UN PROGRAMMATORE HELLO WORD ...... ANCHE L'ULTIMA
Partecipa anche tu! Registrati!
Hai bisogno di aiuto ?
Perchè non ti registri subito?

Dopo esserti registrato potrai chiedere
aiuto sul nostro Forum oppure aiutare gli altri

Consulta le Stanze disponibili.

Registrati ora !
Copyright © dotNetHell.it 2002-2025
Running on Windows Server 2008 R2 Standard, SQL Server 2012 & ASP.NET 3.5