Comment analyser la chaîne à la décimale de sorte que cela fonctionnerait à la fois au format - avec / virgules et périodes?
Test 'Unit.Sandbox.foo' failed: Assert.Equal() Failure Expected: 11 Actual: 1,1
3 Réponses :
Vous devez obtenir le résultat souhaité en modifiant le séparateur décimal de devise vers une virgule avant une analyse sur une chaîne décimale des virgules. Il y a des ressources alimentaires ici: p>
Vous pouvez également implémenter votre propre iFormatProvider comme indiqué ici: P>
http://msdn.microsoft.com/en-us/library/ t7xwkc6.aspx http://msdn.microsoft.com/en-us/library/system.globalization.numberformatinfo.aspx p>
Oh, ou vous pouvez faire un piratage sale et simplement exécuter une chaîne Remplacer sur "", avec "". " ;) p>
Vous pouvez essayer cela:
private decimal Parse(string s){ s = s.Replace(",", CultureInfo.InvariantCulture.NumberFormat.NumberDecimalSeparator); return decimal.Parse(s,NumberStyles.Any, CultureInfo.InvariantCulture); }
Si l'OP veut supporter des milliers de caractères séparateurs, cela ne fonctionnera pas.
@Groo, en effet, mais je ne vois pas comment il pourrait soutenir des milliers de séparateur si la virgule et le point doivent être traités de la même manière ...
@THOMAS Ce n'est pas possible ... :(
@Arnis L., ce qui n'est pas possible?
@Arnis L., cela fonctionne si vous décidez de ne pas gérer des milliers de séparateur
Que diriez-vous de cela?
Essayez-le vous-même: 1.000.000,25 et 1000000.25
Même si cela a analysé, pourquoi seraient-ils égaux? On est 1 point 1, l'autre est onze ...? (Comme vous indiquez explicitement la culture invariante)
@MARC Gravell Je ne suis pas sûr de vous avoir bien compris correctement. Quoi qu'il en soit, l'objectif est d'écrire une fonction d'analyse afin que cela comprenne les deux formats. Affirmé reflète ce que j'essaie d'atteindre.
@Arnis: Je crois que la marque faisait référence à l'ambiguïté de soutenir à la fois le point décimal et les milliers de séparateur en utilisant différentes cultures. Mais je crois que vous ne faites que l'analyse de points décimaux?
@Arnis - i comprend i>, mais: les deux sont des nombres valides dans un ". = Point" et une culture ", = point". Comment proposez-vous de comprendre ce qui est destiné? Dans le "1,1", vous pourriez peut-être simuler, mais qu'en est-il de "1,001" vs "1 001"? Sont-ils les mêmes? Indépendamment de savoir si vous utilisez ou. comme "point", on est mille et un, et l'autre est un point zéro zéro.
@Marc me rappelle "l'humanité échoue" Blog Post de Jon Bit.ly/kqujcr T_T
La réponse est donc - cela ne devrait pas être même essayé ... putain ...
@Arnis je pourrais ne pas le mettre aussi fortement que cela, mais il serait beaucoup plus facile si l'appelant pouvait passer la culture appropriée avec elle ...
@Marc merci. Mais je suis un peu corrigé ce problème d'un autre point de vue. Seul le problème à gauche est que faire avec cette question. :)