2009-05-25 7 views
5

servidor Web que se ejecuta en Holandés (Bélgica)Double.TryParse en holandés

double output; 

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

¿Es esta una buena manera de convertir texto a duplicar en el entorno holandés? Digamos que la entrada es "24.45" en lugar de "24,45"

+1

Argh, ahora he esta canción pegada en la cabeza: –

+0

http://www.youtube.com/watch?v=Rt6Co7EMNCU Gracias Matthew Brindley –

Respuesta

26

Si desea utilizar el Holandés (Bélgica) el formato de número:

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

O, para usar el formato de número de Estados Unidos:

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

Si intenta analizar "24.45" con una holandesa conjunto de cultura, obtendrá "2445", del mismo modo, si intenta analizar "24,45" con una cultura estadounidense, obtendrá "2445". Si desea que el análisis sintáctico a fallar si se utiliza la coma decimal mal, cambiar NumberStyles.Any para excluir la bandera: NumberStyles.AllowThousands:

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

Si toda la aplicación está en holandés, debe cambiar su CultureInfo a nivel mundial - y here's how to do it in WinFormshere's how to do it in ASP.NET.

Una vez que estés utilizando un conjunto global CultureInfo, puede cambiar el código anterior para:

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

Si configuro CultureInfo de forma global, double.TryParse ("24.45", salida) realizará lo mismo que double.TryParse ("24.45", NumberStyles.Any, CultureInfo.CurrentCulture, out output)? –

+0

Muy buena respuesta! – Cerebrus

0

Si la configuración regional del servidor se ponen a números holandeses, intente esto:

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

puede utilizar la sobrecarga que le permite especificar la configuración regional (muestra con la configuración regional sueca, ya que sé cómo funciona esa):

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

Si pasara "24.95" en la llamada anterior a TryParse, devolvería falso, ya que el signo decimal sueco es ",".

Es posible que desee experimentar con el parámetro NumberStyles para obtener el comportamiento exacto que desea. Por ejemplo, si cambio a NumberStyles.Any y llamo al método con la entrada 24.95 anterior, TryParse devuelve true y el resultado será 2495, que podría no ser el que desea.

2

El código cultural correcto para dutch-Belgium es "nl-BE", por lo que debe usarlo en lugar del "nl-NL" sugerido, que le daría la variante de la configuración de cultura holandesa apropiada para los Países Bajos.

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

Puede encontrar una lista completa de los códigos de cultivo a http://arvindlounge.spaces.live.com/blog/cns!C9061D5B358A2804!263.entry.

0

Mi versión funciona bien con los dos separadores '.' y ',':

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

Esto no funcionaría muy bien con números como '1,234,567.89' o' 1,234,567,89' – phoog

Cuestiones relacionadas