c# - places - Problema al analizar el texto de la divisa a tipo decimal
format decimal c# comma (2)
Estoy tratando de analizar una cadena como "$ 45.59" en un decimal. Por alguna razón, estoy recibiendo una excepción porque la entrada no estaba en el formato correcto. No me importan las cosas de localización porque no va a ser un programa global. Esto es lo que estoy haciendo. ¿Ves algún problema?
NumberFormatInfo MyNFI = new NumberFormatInfo();
MyNFI.NegativeSign = "-";
MyNFI.NumberDecimalSeparator = ".";
MyNFI.NumberGroupSeparator = ",";
MyNFI.CurrencySymbol = "$";
decimal d = decimal.Parse("$45.00", MyNFI); // throws exception here...
¿Qué hay de usar:
decimal d = decimal.Parse("$45.00", NumberStyles.Currency);
La documentación de MSDN en Decimal.Parse declara:
"El parámetro s se interpreta con el estilo NumberStyles.Number. Esto significa que se permiten espacios en blanco y separadores de miles, pero no los símbolos de moneda. Para definir explícitamente los elementos (como símbolos de moneda, separadores de miles y espacios en blanco) que pueden ser presente en s, use el método Decimal.Parse (String, NumberStyles, IFormatProvider)
De esta manera me funciona:
NumberFormatInfo MyNFI = new NumberFormatInfo();
MyNFI.NegativeSign = "-";
MyNFI.CurrencyDecimalSeparator = ".";
MyNFI.CurrencyGroupSeparator = ",";
MyNFI.CurrencySymbol = "$";
decimal d = decimal.Parse("$45.00", NumberStyles.Currency, MyNFI);
1.) Debe definir el separador de monedas en lugar del separador de números. 2.) Debido a que usted solo definió los valores de moneda, necesita definir NumberStyles.Currency durante el análisis.