17 messaggi dal 11 novembre 2014
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
E' sbagliato questo:
Convert.ToDouble(numero_in)
dopo che fai il replace (dipende dalla culture).
Non capisco anche la divisione per 100...
Modificato da manuel0081 il 11 novembre 2014 15.09 -

Ormai programmano tutti... ma la professionalità appartiene a pochi
17 messaggi dal 11 novembre 2014
manuel0081 ha scritto:
E' sbagliato questo:
Convert.ToDouble(numero_in)
dopo che fai il replace (dipende dalla culture).
Non capisco anche la divisione per 100...
Modificato da manuel0081 il 11 novembre 2014 15.09 -


intanto grazie per la risposta,
dopo aver controllato per l'ennesima volta il codice mi sono accorto che ho invertito :
numero_in = numero_in.Replace(',', '.');
infatti doveva essere :
numero_in = numero_in.Replace('.', ',');

ora la conversione e' quasi perfetta, nel senso che i numeri vengono tradotti bene, ma 2345,1234 me lo converte in duemilatrecentoquarantacinque/34 ... come posso farlo arrotondare a /13 o fargli scrivere solo /12 ?

Torna al forum | Feed RSS

ASPItalia.com non è responsabile per il contenuto dei messaggi presenti su questo servizio, non avendo nessun controllo sui messaggi postati nei propri forum, che rappresentano l'espressione del pensiero degli autori.