c# - numerico - Convierte cualquier cadena de moneda al doble
textbox formato moneda vb net (2)
Necesito almacenar varias monedas en el servidor SQL. Entiendo que SQL no admitirá todos los diferentes tipos de monedas (a menos que lo almacene como una cadena, pero no quiero hacer eso).
Mi idea era convertir todos los valores de su formato de moneda a un doble estándar y almacenar eso en su lugar. A continuación, simplemente vuelva a formatear según la información cultural cuando se muestre. Sin embargo, he intentado hacer algo como, por ejemplo
var cultureInfo = new System.Globalization.CultureInfo("en-US");
double plain = return Double.Parse("$20,000.00", cultureInfo);
Esto parece que nunca funciona, siempre arroja una FormatException
. Incluso eliminar el símbolo de moneda y simplemente tratar de hacer esto basándose en el número solo hace lo mismo. Este es solo un ejemplo. Quiero admitir prácticamente cualquier tipo de moneda.
¿Existe una forma estándar de excluir moneda y obtener el valor como un doble?
Creo que esto debería funcionar:
double.Parse(currencyValue, NumberStyles.Currency);
Aquí puedes ver más sobre los NumberStyles .
Editar: en caso de que alguien vea esta respuesta sin mirar las otras respuestas / comentarios, esta respuesta respondió la pregunta tal como está escrita, pero almacenar moneda como un double
no es una buena idea, y sería mejor usar decimal lugar.
Debes pasar NumberStyles a la función Parse
Decimal.Parse("$20,000.00", NumberStyles.AllowCurrencySymbol | NumberStyles.AllowDecimalPoint | NumberStyles.AllowThousands, new CultureInfo("en-US"));
Algunas otras cosas, para las monedas, le sugiero que use Decimal. Y esto podría estar muy lejos, pero podría ser mejor almacenar los datos de la moneda como dinero en la base de datos y agregar un código de moneda para identificar la moneda del valor.
Sí, y las respuestas sugirieron NumberStyles.Currency que sería mejor. Es un valor preorientado, si aún piensas que quieres usar las cadenas.