2010-05-16 10 views
10

J'ai un code source XML qui utilise un point (".") Comme séparateur décimal et je l'analyse sur un système qui utilise une virgule (",") comme séparateur décimal.Double.TryParse() séparateur décimal d'entrée différent du séparateur décimal système

En conséquence, la valeur de 0,7 s'analysée avec Double.TryParse ou Double.Parse comme 7000000.

Quelles sont mes options pour analyser correctement? L'un d'eux est de remplacer les points dans la source par des virgules avec String.Replace('.', ',') mais je ne pense pas que j'aime beaucoup cela.

Répondre

22

standard XML est explicite au sujet de la mise en forme des dates et des chiffres, etc. Cela aide à faire en sorte que le XML est indépendant de la plateforme et interopérable. Jetez un oeil à l'aide de XmlConvert pour les données XML.

double value = XmlConvert.ToDouble(stringValue); 
+3

Ceci est une bonne recommandation car beaucoup de gens ne connaissent pas la classe XmlConvert. Ceci est particulièrement important lorsque vous travaillez avec des valeurs DateTime. – Josh

+0

Oui, je n'étais pas au courant de celui-ci aussi. Merci! – asgerhallas

+0

Je n'avais aucune idée. Je vous remercie. – JefClaes

12

double.TryParse a une surcharge prenant un IFormatProvider. Utilisez un CultureInfo correspondant, dans votre cas, CultureInfo.InvariantCulture peut être utilisé.

+5

Un exemple aurait été apprécié, pour nous types paresseux. – Fueled

15

Ce fait le travail:

string test = "0.7"; 
    Assert.Equal(0.7, Double.Parse(test, NumberStyles.Float, CultureInfo.InvariantCulture)); 
+2

Pourquoi la downvote? – asgerhallas

+0

Vous devriez décrire un peu comment et pourquoi cela fonctionne. – Lii

7

Un moyen facile de spécifier séparateur décimal personnalisée:

var price = "122$00"; 
var nfi = new NumberFormatInfo { CurrencyDecimalSeparator = "$" }; 
var ok = decimal.TryParse(price, NumberStyles.Currency, nfi, out result); 
Questions connexes