2013-03-21 38 views
5

Provo a rimuovere il separatore delle migliaia, quindi sto sperimentando del codice, ma genera ed eccezione. Ho provato con Convert.ToDouble, Convert.ToDecimal ecccome rimuovere il separatore delle migliaia usando cultureinfo?

dice:

Convert.ToDouble ("1.234,45") ha gettato ed eccezione di 'System.FormatException'

La conversione è gettato dalla linea: Convert.ToDouble()

l'argomento n2 utilizza il culturinfo, ma ho anche provato "0.00", sia tiri la stessa eccezione

L'idea generale è: come rimuovere il separatore delle migliaia, il mio input è sempre in questo formato: 1.234,54 (virgola come decimale e punto come migliaio separatore) ... Mi piace usarlo in Textbox GotFocus Event .. così formato deve essere visualizzata come 12345,45

così: 1.254,45 dovrebbe essere 1254,45 e 1.254,00 dovrebbe essere 1254,00

//http://msdn.microsoft.com/en-us/library/dwhawy9k.aspx 

CultureInfo ci = CultureInfo.GetCultureInfo("NL-be"); 
NumberFormatInfo nfi = (NumberFormatInfo)ci.NumberFormat.Clone(); 
//Now force thousand separator to be empty string 
nfi.NumberGroupSeparator = ""; 
//Format decimal number to 2 decimal places 
string decimalFormatted = Convert.ToDouble("1.234,45").ToString("0.00", nfi); 
string decimalFormatted = Convert.ToDouble("1.234,45").ToString("n2", nfi); 
+0

Per la cultura invariabile: 'Convert.ToDouble (" 1.234,45 ", CultureInfo.InvariantCulture)' else: 'Convert.ToDouble (" 1.234,45 ", CultureInfo.GetCultureInfo (" en-gb "))' – Fendy

+0

il codice delle linee dà lo stesso errore. – ethem

risposta

6

specificare la lingua con conversione e funzionerà come :

CultureInfo ci = CultureInfo.GetCultureInfo("NL-be"); 
double d = Convert.ToDouble("1.234,45", ci); 
+0

grazie a questo codice funzionava per me. Ma come funziona? perché NL-be ha mille separatori a DOT, quindi dovrebbe comunque mostrare il punto. – ethem

+0

@mesut, non ho capito cosa intendi con 'show the dot'? – Habib

+0

"@ Habib": Ho appena visto un problema: la regola è tutto dopo che la virgola è un decimale, tutto funziona bene eccetto la situazione # 1: se digito 1234,00 e se ne vado (lo fa: o 123.400,00) e quando digito 1234,56 fa 123.456,00) ... quindi quando uso la virgola come decimale il risultato non è buono ... se digito 1234.56 fa 1.234,56 che è buono. Quindi, come posso risolvere 1234,56. non dovrebbe fare 123.456,00 ma dovrebbe fare 1.234,56. e anche digitare 12,34 diventa 1234,00. per favore consiglio? – ethem

3

Le chiamate a Convert.ToDouble non specificare affatto un formato. È necessario ricordare che questo:

string decimalFormatted = Convert.ToDouble("1.234,45").ToString("n2", nfi); 

è equivalente a:

double tmp = string decimalFormatted = Convert.ToDouble("1.234,45"); 
string decimalFormatted = tmp.ToString("n2", nfi); 

E 'la prima linea che è in mancanza, non il secondo ... e nella prima riga, è solo intenzione di utilizzare il cultura del filo corrente.

Suggerisco di utilizzare invece Double.Parse e di specificare il formato lì. (Si potrebbe utilizzare Convert.ToDouble invece, ma io in genere preferisco le Double.Parse ecc chiamate più specifiche. Significa che c'è meno di cambiare se ci si sposta a TryParse etc.)

Si dovrebbe anche considerare l'utilizzo decimal invece di double se le cifre esatte contano. Ad esempio, se si tratta di un valore di valuta, è logicamente più di un numero decimal rispetto a un numero double.

Problemi correlati