todecimal places parse convertir convert c# parsing decimal number-formatting

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.