2010-05-16 25 views
10

Tengo un XML fuente que usa un punto (".") Como separador decimal y estoy analizando esto en un sistema que usa una coma (",") como un separador decimal.Double.TryParse() separador decimal de entrada diferente al separador decimal del sistema

Como resultado, el valor de 0,7 se analiza con Double.TryParse o Double.Parse como 7000000

¿Cuáles son mis opciones para analizar correctamente? Una de ellas es reemplazar los puntos en el código con comas con String.Replace('.', ','), pero no creo que me guste tanto.

Respuesta

22

estándar XML es explícito sobre el formato de fechas y números, etc. Esto ayuda a asegurar que el XML es independiente de la plataforma e interoperable. Eche un vistazo al uso de XmlConvert para obtener datos xml.

double value = XmlConvert.ToDouble(stringValue); 
+3

Esta es una buena recomendación ya que muchas personas desconocen la clase XmlConvert. Esto es particularmente importante cuando se trabaja con valores DateTime. – Josh

+0

Sí, no estaba al tanto de esto también. ¡Gracias! – asgerhallas

+0

No tenía ni idea. Gracias. – JefClaes

12

double.TryParse tiene una sobrecarga con un proveedor de IFormat. Use un CultureInfo correspondiente, en su caso CultureInfo.InvariantCulture se puede usar.

+5

Un ejemplo habría sido apreciado, para nosotros, los tipos perezosos. – Fueled

15

Esto hace el trabajo:

string test = "0.7"; 
    Assert.Equal(0.7, Double.Parse(test, NumberStyles.Float, CultureInfo.InvariantCulture)); 
+2

¿Por qué el voto a favor? – asgerhallas

+0

Debe describir un poco cómo y por qué esto funciona. – Lii

7

Una forma sencilla de especificar separador personalizado decimales:

var price = "122$00"; 
var nfi = new NumberFormatInfo { CurrencyDecimalSeparator = "$" }; 
var ok = decimal.TryParse(price, NumberStyles.Currency, nfi, out result); 
Cuestiones relacionadas