2011-06-28 18 views
7

¿Por qué double.TryParse() con estos ajustes no analizarnúmeros de análisis sintáctico con un comportamiento extraño Double.TryParse

double.TryParse("1.035,00", 
NumberStyles.AllowCurrencySymbol | NumberStyles.AllowLeadingWhite | NumberStyles.AllowTrailingWhite | 
NumberStyles.AllowDecimalPoint | NumberStyles.AllowLeadingSign, 
GlobalSettings.Instance.DefaultCulture, out price); 

donde DefaultCulture es sl-SI (Eslovenia), que tiene el punto . como símbolo de agrupación de dígitos y, como punto decimal . El price sigue siendo 0 después del análisis.

?

+0

TryParse devuelve un 'bool' que indica si el valor de análisis tuvo éxito o no. Para su ejemplo, TryParse devuelve 'false'. Entonces la causa de que 'price' sea' 0' es que la cadena no pudo ser analizada. – dtb

+3

Me parece extraño que algunos voten cerca debido a la localización. Si el problema era la cultura, afectaría a muchas culturas, todas las que usaban coma como separador decimal, que es tanto el estándar ISO como la representación utilizada en la mayoría de los países –

Respuesta

6

Te faltan NumberStyles.AllowThousands:

double.TryParse("1.035,00", NumberStyles.AllowCurrencySymbol | 
          NumberStyles.AllowLeadingWhite | 
          NumberStyles.AllowTrailingWhite | 
          NumberStyles.AllowDecimalPoint | 
          NumberStyles.AllowLeadingSign | 
          NumberStyles.AllowThousands, 
          GlobalSettings.Instance.DefaultCulture, out price); 
+0

perfecto, gracias – mare

2

Esto funcionó para mí

double.TryParse("1.035,00", 
NumberStyles.Any, 
GlobalSettings.Instance.DefaultCulture, out price); 
+0

¿alguien más aconsejaría sobre el uso de NumberStyles.Any en un sentido, si hay algún problema potencial con él? – mare

+1

Según MSDN ** Indica que se utilizan todos los estilos excepto AllowHexSpecifier. Este es un estilo de número compuesto. ** – V4Vendetta

Cuestiones relacionadas