2011-02-24 16 views
11

Tengo un número doble como cadena. El número esAnálisis doble con formato de cultura

202.667,40

Cuál es 202667,4

¿Cómo puedo analizar esta cadena para obtener el valor como:? Double.Parse ("202.667,40", lo que aquí), o cualquier otro método para obtener el valor sería genial. Gracias

+6

Usa CultureInfo de una cultura que usa una coma como punto decimal. Alemania por ejemplo. Preferiblemente haciendo juego con el país del que proviene la cuerda. –

Respuesta

26

En primer lugar, lo que necesita saber lo que la cultura de este número es de, a continuación:

CultureInfo culture = new CultureInfo("de"); // I'm assuming german here. 
double number = Double.Parse("202.667,40", culture); 

Si desea analizar el uso de la cultura hilo actual, que por defecto es la establecida para el usuario actual:

double number = Double.Parse("202.667,40", CultureInfo.CurrentCulture); 
+1

El uso de "de" hace que una excepción NotSupportedException sea lanzada por mí. "Culture 'de' es una cultura neutral. No se puede utilizar en el formateo y el análisis y, por lo tanto, no se puede establecer como la cultura actual de la secuencia". Quizás quiso "de-DE"? –

1

Puede usar Double.Parse (su_número, CultureInfo.CurrentCulture) y establecer CurrentCulture en consecuencia con Thread.CurrentThread.CurrentCulture.

Ejemplo:

Thread.CurrentThread.CurrentCulture = new CultureInfo("es-ES"); 

luego

Double.Parse(your_number, CultureInfo.CurrentCulture); 

Tenga en cuenta que si asigna explícitamente la cultura a la CurrentThread, sólo se aplica a ese hilo.

1

Para mayor flexibilidad se puede establecer NumberDecimalSeparator

string number = "202.667,40"; 
         double.Parse(number.Replace(".", ""), new CultureInfo(CultureInfo.CurrentCulture.Name) {NumberFormat = new NumberFormatInfo() {NumberDecimalSeparator = ","}}); 
0
Double.Parse("202.667,40", new System.Globalization.CultureInfo("de-DE")); 

En lugar de de-DE uso sea cual sea la cultura de la cadena está en.

8

creo que he encontrado una solución que no requiere de una cultura. El uso de un NumberFormatInfo puede forzar un formato, sin importar la cultura:

// This is invariant 
NumberFormatInfo format = new NumberFormatInfo(); 
// Set the 'splitter' for thousands 
format.NumberGroupSeparator = "."; 
// Set the decimal seperator 
format.NumberDecimalSeparator = ","; 

Luego, más tarde:

System.Diagnostics.Debug.WriteLine(double.Parse("202.667,40", format))); 

Salidas:
202667,4

Por supuesto, esto salida (inner toString()) puede diferir por Cultura (!)
Tenga en cuenta que cambiar la entrada a "202,667.40" dará como resultado un error de análisis, por lo que el formato debe coincidir con su entrada esperada.

Espero que esto ayude a alguien ..

0

En lugar de tener que especificar una configuración regional en todos los análisis sintácticos, prefiero establecer una amplia regional de la aplicación, aunque si los formatos de cadena no son consistentes a través de la aplicación, esto no podría funcionar.

CultureInfo.DefaultThreadCurrentCulture = new CultureInfo("pt-PT"); 
CultureInfo.DefaultThreadCurrentUICulture = new CultureInfo("pt-PT"); 

La definición de este al comienzo de su aplicación hará que todos los análisis sintácticos dobles esperan una coma como separador decimal.

Cuestiones relacionadas