¿Cómo puedo aceptar cadenas como "$ 1,250.00" y convertirlo a un decimal en C #?
Pregunta
¿Cómo puedo aceptar cadenas como " $ 1,250.00 " y convertirlo a un decimal en C #?
¿Acabo de reemplazar (" $ " ;, " ") y (", " ;, " ") o hay una forma diferente de manejar este tipo de entrada?
Solución
¿Has probado Decimal.Parse con la opción AllowCurrencySymbol (y otras opciones de soporte)?
var d = Decimal.Parse(input,
NumberStyles.AllowCurrencySymbol |
NumberStyles.AllowDecimalPoint |
NumberStyles.AllowThousands);
Otros consejos
¿Acabo de hacer un
Reemplazar (" $ " ;, " ")
yReemplazar (", " ;, " ")
[ ?]
No. Por un lado, un código como este no es divertido de mantener. En segundo lugar, '$' no es el único símbolo de moneda en el mundo y ',' no es el único separador de miles. Es decir, el código como está pensando dificulta los problemas de globalización.
¿[I] hay una manera diferente de manejar este tipo de entrada?
Sí Utilice Decimal.Parse
con NumberStyles.Currency
:
string s = "$1,250.00";
decimal d = decimal.Parse(s, NumberStyles.Currency);
ahora con formato :)
decimal val = Decimal.Parse(
Value.Replace(" ", ""),
NumberStyles.AllowThousands
| NumberStyles.AllowDecimalPoint
| NumberStyles.AllowCurrencySymbol
);
Esto debería hacer el truco:
string money = "$1,250.00";
money = money.Replace(',' ');
decimal test = Convert.ToDecimal(money);