2013-03-21 8 views
5

Ich versuche, das Tausendertrennzeichen zu entfernen, also experimentiere ich etwas Code, aber es wirft und Ausnahme. Ich habe versucht, mit Convert.ToDouble, Convert.ToDecimal usw.Wie entferne ich das Tausendertrennzeichen mit culturinfo?

heißt es:

Convert.ToDouble ("1.234,45") warf und Ausnahme von 'System.FormatException'

Die Umwandlung geworfen wird aus der Leitung: Convert.ToDouble()

Das Argument n2 die culturinfo verwendet, aber ich habe auch versucht, „0.00“ werfen beide die gleiche Ausnahme

Die ganze Idee ist: Wie entferne ich das Tausendertrennzeichen, meine Eingabe ist immer in diesem Format: 1.234,54 (Komma als Dezimaltrennzeichen und Punkt als Tausendertrennzeichen) ... Ich benutze es gerne in Textbox GotFocus Event .. so sollte das Format wie 12345,45

so gezeigt werden: 1.254,45 sollte 1254,45 sein und sollte 1.254,00 1254,00 mit Wandlungs-

//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

Für invariante Kultur: 'Convert.ToDouble (" 1.234,45 ", CultureInfo.InvariantCulture)' else: 'Convert.ToDouble (" 1.234,45 ", CultureInfo.GetCultureInfo (" de-gb "))' – Fendy

+0

beide Zeilencode gibt den gleichen Fehler. – ethem

Antwort

6

Geben sie die Kultur sein und es wird funktionieren wie :

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

Danke, dass dieser Code für mich funktioniert hat. aber wie funktioniert es? weil NL-sei hat tausend Trennzeichen ein DOT, so sollte es immer noch den Punkt zeigen.? – ethem

+0

@mesut, ich habe nicht verstanden, was du mit 'show the dot' meinst? – Habib

+0

"@ Habib": Ich sehe nur ein Problem: die Regel ist alles nach dem Komma ist eine Dezimalzahl, alles funktioniert gut außer # 1 Situation: wenn ich 1234,00 eingeben und (es macht: oder 123.400,00) und Wenn ich 1234,56 eintippe, ergibt das 123.456,00) ... wenn ich Komma als Dezimalzahl verwende, ist das Ergebnis nicht gut ... Wenn ich 1234.56 tippe, ergibt das 1.234,56, was gut ist. Wie kann ich 1234,56 beheben? Es sollte nicht 123.456,00 ergeben, aber es sollte 1.234,56 ergeben. und auch Typ 12,34 wird 1234,00. bitte Beratung? – ethem

3

Ihre Anrufe an Convert.ToDouble geben Sie kein Format an. Sie müssen sich daran erinnern, dass dies:

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

äquivalent ist:

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

Es ist die erste Zeile, die nicht die zweite ... und in der ersten Zeile hat versagt, es ist nur die nicht benutzen wollen aktuelle Thread-Kultur.

Ich schlage vor, dass Sie stattdessen Double.Parse verwenden und dort das Format angeben. (Sie könnten Convert.ToDouble anstelle, aber ich ziehe im Allgemeinen die mehr typspezifischen Double.Parse usw. Anrufe. Es bedeutet, dass es weniger zu ändern, wenn Sie zu TryParse bewegen etc.)

sollten Sie auchdecimal betrachten anstelle von double wenn die genauen Ziffern sind wichtig. Zum Beispiel, wenn dies ein Währungswert ist, ist es logisch mehr eine decimal Nummer als eine double Nummer.