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?

¿Fue útil?

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 (" $ " ;, " ") y Reemplazar (", " ;, " ") [ ?]

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
);

http://www.codeproject.com/KB/cs/Eduardo_Sierra.aspx

Esto debería hacer el truco:


      string money = "$1,250.00";
      money = money.Replace(',' ');
      decimal test = Convert.ToDecimal(money);
Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top