Pregunta

Esto me está volviendo loca.Tengo la siguiente cadena en una página de formulario web ASP.NET 2.0

string s = "0.009";

Suficientemente simple.Ahora, si mi cultura es española - que es "es-ES" - y trato de convertir la cadena a Double, hago lo siguiente:

double d = Double.Parse(s, new CultureInfo("es-ES"));

lo que esperaría es 0,009.En cambio, obtengo 9.Entiendo que .NET cree que es un separador de mil, que en EE. UU. es una coma, pero ¿no debería tomar la información cultural que estoy pasando al método de análisis y aplicar el formato correcto a la conversión?

Si lo hago

double d = 0.009D;
string formatted = d.ToString(new CultureInfo("es-ES"));

formateado ahora es 0,009.¿Cualquiera?

¿Fue útil?

Solución

es teniendo la cultura que dio y aplicar el formato correcto. Que ya ha proporcionado una serie de "0.009" y lo hicieron saber que era español ... entonces se quejan de que correctamente interpretó como español! No le diga lo que la cadena es español cuando se sabe que no lo es.

Debe pasar el método Parse la cultura de la cadena que se está analizando, que en este caso sería en-Estados Unidos o en-GB o InvariantCulture.

Otros consejos

lo que escribe Jess funciona para mí.solo para cualquiera que necesite probar cómo obtener una "cultura invariante":se ve esto

double d = Double.Parse(myString, CultureInfo.InvariantCulture);

(primera publicación de stackoverflow, así que sí, bastante marginal;)

Hay que al revés.

Cuando dice double d = Double.Parse(s, new CultureInfo("es-ES"));, que está pidiendo NET para analizar la cadena en un doble, en el supuesto de que la cadena está escrito en la cultura es-ES.

En la cultura española "" es un separador de miles, por lo que "0,009" es 9.

Cuando se convierte usando ToString (), al final, es decir convertir 0,009 a cadena mediante la cultura española, por lo que utiliza "" como separador decimal, y se obtiene '0009'. El comportamiento es correcto.

Mi conjetura es que desea utilizar Double.Parse con la referencia cultural de todos, y ToString con la cultura española, por lo que se convierte en 0,009 0009.

Creo que se está interpretando que al revés, en es-ES cultura 0.009 es en realidad un largo camino de decir 9, como el "" No es el separador decimal, por lo que si le preguntas a la cadena "0,009" a ser Analizada con la cultura es-ES debe de hecho conseguir el deouble 9.0. Si le preguntas a analizar "0009" que debe obtener un doble de 0.009.

Del mismo modo, si le preguntas a formato el doble 0,009 que debe obtener la cadena "0009" en el es-ES.

Usted está confundiendo el análisis sintáctico y el formato. Se obtiene 9 en lugar de 0.009 la primera vez porque se toma una cadena que se formatea en una cultura basada en el. Y analizarlo usando una cultura basada. Es necesario analizar usando cualquier cultura en la que fue creado y luego darle formato utilizando cualquier cultura que desea para su visualización.

double d = Double.Parse("0,009",
    NumberStyles.AllowDecimalPoint | NumberStyles.AllowThousands,
    CultureInfo.CreateSpecificCulture("es-ES"));

En la cultura es-ES "" es una seporator decimal (no "")

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top