2009-05-25 8 views
5

Webserver in Niederländisch (Belgien) laufenDouble.TryParse in dutch

double output; 

double.TryParse(txtTextbox1.Text, out output); 

Ist das ein guter Weg, um Text zu konvertieren in holländisch zu verdoppeln? Lassen Sie uns sagen, dass der Eingang „24.45“ statt „24,45

+1

Argh, jetzt habe ich dieses Lied in meinem Kopf: http://www.youtube.com/watch?v=Rt6Co7EMNCU –

+0

Dank Matthew Brindley –

Antwort

26

Wenn Sie das niederländischen (Belgien) Zahlenformat verwenden:

double output; 
double.TryParse("24,45", NumberStyles.Any, CultureInfo.GetCultureInfo("nl-BE"), out output); 

Oder das US-Nummer-Format zu verwenden:

double output; 
double.TryParse("24.45", NumberStyles.Any, CultureInfo.GetCultureInfo("en-US"), out output); 

Wenn Sie versuchen, "24,45" mit einem niederländischen zu analysieren Wenn Sie versuchen, "24,45" mit einer US-Kultur zu analysieren, erhalten Sie "2445". Wenn Sie die Parse zum Scheitern verurteilt, wenn die falsche Dezimalpunkt wollen verwendet wird, NumberStyles.Any ändern, um die Fahne auszuschließen: NumberStyles.AllowThousands:

double output; 
if (double.TryParse("24.45", NumberStyles.Any^NumberStyles.AllowThousands, CultureInfo.GetCultureInfo("nl-BE"), out output)) 

Wenn Ihre gesamte Anwendung auf Niederländisch ist, sollten Sie Ihre Culture global ändern - here's how to do it in WinForms und here's how to do it in ASP.NET.

Sobald Sie eine global gesetzt Culture verwenden, können Sie den obigen Code ändern:

double output; 
double.TryParse("24.45", NumberStyles.Any, CultureInfo.CurrentCulture, out output); 
+0

Wenn ich CultureInfo global setze, wird double.TryParse ("24.45", out output) genauso funktionieren wie double.TryParse ("24.45", NumberStyles.Any, CultureInfo.CurrentCulture, out-Ausgabe)? –

+0

Sehr nette Antwort! – Cerebrus

0

Wenn der Server den Ländereinstellungen auf Niederländisch Zahlen gesetzt sind, versuchen Sie dies:

double output; 
double.TryParse(txtTextbox1.Text, System.Globalization.NumberStyles.Any, System.Globalization.CultureInfo.CurrentCulture, out output); 
0

Sie können die Überladung verwenden, mit der Sie Gebietsschema angeben können (Beispiel mit schwedischem Gebietsschema, da ich weiß, wie das funktioniert):

double result; 
if (double.TryParse("24,95", NumberStyles.AllowDecimalPoint, CultureInfo.GetCultureInfo("sv-SE"), out result)) 
{ 
    Console.WriteLine(result.ToString()); 
} 

Wenn ich "24.95" in dem obigen Aufruf von TryParse übergeben würde, würde es false zurückgeben, da das schwedische Dezimalzeichen "," ist.

Sie können mit dem NumberStyles-Parameter experimentieren, um genau das gewünschte Verhalten zu erhalten. Zum Beispiel, wenn ich zu NumberStyles.Any wechseln würde und die Methode mit der obigen Eingabe 24.95 aufrufen würde, gibt TryParse true zurück und das Ergebnis wird 2495 sein, was möglicherweise nicht das ist, was Sie wollen.

2

Der korrekte Culture Code für Niederländisch-Belgien ist "nl-BE", also sollten Sie anstelle des oft vorgeschlagenen "nl-NL" verwenden, was Ihnen die für die Niederlande geeignete Variante der niederländischen Kultureinstellungen bietet.

Eine vollständige Liste der Kulturcodes finden Sie unter http://arvindlounge.spaces.live.com/blog/cns!C9061D5B358A2804!263.entry.

0

Meine Version funktioniert mit beiden Separatoren '.' und ',':

public static double? GetDoubleFromString(string strNum) 
     { 
      double num = 0; 
      strNum = strNum.Replace(',', '.'); 

      if (double.TryParse(strNum, NumberStyles.Any, CultureInfo.GetCultureInfo("en-US"), out num)) 
       return num; 

      return null; 
     } 
+1

Dies würde nicht sehr gut mit Zahlen wie "1,234,567.89" oder "1.234.567,89" funktionieren – phoog

Verwandte Themen