Problème de l'analyse de la monnaie de texte de type décimal
Je suis en train d'analyser une chaîne comme "$45.59" en nombre décimal. Pour certaines raisons, je suis d'exception que l'entrée n'était pas dans le bon format. Je n'ai pas garde, la localisation des trucs parce que ce n'est pas un programme global. Voici ce que je fais. Voyez-vous des problèmes?
NumberFormatInfo MyNFI = new NumberFormatInfo();
MyNFI.NegativeSign = "-";
MyNFI.NumberDecimalSeparator = ".";
MyNFI.NumberGroupSeparator = ",";
MyNFI.CurrencySymbol = "$";
decimal d = decimal.Parse("$45.00", MyNFI); //throws exception here...
Vous devez vous connecter pour publier un commentaire.
Comment sur l'utilisation de:
La documentation MSDN sur Décimal.Analyser états:
NumberFormatInfo
:decimal d = decimal.Parse("$45.00", NumberStyles.Currency, MyNFI);
NumberStyles
est dans leSystem.Globalization
espace de noms, afin de les importer:using System.Globalization
en haut de votre .cs fichier, ou indiquez le chemin d'accès complet lorsque vous l'utilisez:System.Globalization.NumberStyles
.De cette façon que cela fonctionne pour moi:
1.) Vous devez définir la monnaie séparateur à la place du numéro de séparateur.
2.) Parce que vous avez défini la valeur d'une devise, vous devez définir la NumberStyles.La monnaie lors de l'analyse.
Quand j'ai essayé d'exécuter le code de @JohnKoerner, il ne pourrait pas, à l'exception:
System.FormatException
, avec le message:"Input string was not in a correct format."
. @Les HOMMES de réponse a été utile, mais je voulais ajouter une idée supplémentaire sur la accepté de répondre et comment faire pour résoudre ce problème.Un peu comme @les HOMMES, j'ai dû inclure
NumberFormatInfo
avant la.Parse()
méthode a fonctionné correctement. Toutefois, la spécification de la virgule avecCurrencyDecimalSeparator
n'était pas nécessaire pour moi. Vous devez inclure toutes les propriétés dont vous avez besoin pour vos numéros. Voici une liste dans la définition de classe docs:MSDN Docs - Classe NumberFormatInfo
Je vais jamais m'en nombres négatifs dans mon application, j'ai donc choisi de ne pas l'inclure. Voici ce que j'ai: