Comment puis-je accepter des chaînes comme «1 250,00 $» et les convertir en décimales en C #?

StackOverflow https://stackoverflow.com/questions/1210553

  •  06-07-2019
  •  | 
  •  

Question

Comment puis-je accepter des chaînes telles que " 1 250,00 $ " et le convertir en décimal en C #?

Dois-je simplement remplacer ("$", "") et (",", "" ou y a-t-il une autre façon de gérer ce type de saisie?

Était-ce utile?

La solution

Avez-vous essayé Decimal.Parse avec l'option AllowCurrencySymbol (et d'autres options de support)?

var d = Decimal.Parse(input, 
  NumberStyles.AllowCurrencySymbol |
  NumberStyles.AllowDecimalPoint |
  NumberStyles.AllowThousands);

Autres conseils

  

Est-ce que je fais juste un Remplacer ("$", "") et Remplacer (",", ",") [ ?]

Non. D'une part, un code comme celui-ci n'est pas amusant à maintenir. Deuxièmement, «$» n'est pas le seul symbole monétaire dans le monde et «,» n'est pas le seul séparateur des milliers. C’est-à-dire que le code que vous pensez rend les problèmes de mondialisation difficiles.

  

[J] ai-je une autre façon de gérer ce type d’informations?

Oui. Utilisez Decimal.Parse avec NumberStyles.Currency :

string s = "$1,250.00";
decimal d = decimal.Parse(s, NumberStyles.Currency);

maintenant avec le formatage:)

decimal val = Decimal.Parse(
    Value.Replace(" ", ""), 
    NumberStyles.AllowThousands 
     | NumberStyles.AllowDecimalPoint 
     | NumberStyles.AllowCurrencySymbol
);

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

Cela devrait faire l'affaire:


      string money = "$1,250.00";
      money = money.Replace(',' ');
      decimal test = Convert.ToDecimal(money);
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top