2009-07-31 5 views
3

Comment puis-je accepter des chaînes comme "$ 1,250.00" et le convertir en décimal en C#? Est-ce que je fais juste un remplacement ("$", "") et (",", "") ou y a-t-il une manière différente de gérer ce type d'entrée?

Répondre

20

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

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

maintenant avec la mise en forme :)

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

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

+0

Puis-je demander pourquoi vous remplacez les espaces par des bouteilles vides au lieu de les tailler? –

+0

J'ai énuméré l'URL pour le site que j'ai saisi le code, je ne l'ai pas écrit moi-même (pourquoi passer quelques minutes à réinventer les roues quand un google de 15 secondes obtient la réponse?). L'exemple donné sur le site est pour quand quelqu'un a placé un espace après le symbole monétaire –

+0

Yep. Vous avez seulement besoin d'ajouter NumberStyles.AllowLeadingWhite | NumberStyles.AllowTrailingWhite au lieu de faire le remplacement de la chaîne. On peut soutenir que supprimer les espaces au milieu serait incorrect car cela pourrait potentiellement valider quelque chose qui n'est pas correct. – tvanfosson

5

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

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

[I] s y a-t-il une façon différente de gérer ce type d'entrée?

Oui. Utilisez Decimal.Parse avec NumberStyles.Currency:

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

Cela devrait faire l'affaire:


     string money = "$1,250.00"; 
     money = money.Replace('$',' '); 
     decimal test = Convert.ToDecimal(money); 
Questions connexes