11
votes

DOUBLE.TRYPARSE () Séparateur décimal d'entrée () DIFFÉRENT DIFFÉRENT LE SÉPARATEUR DECIMAL SYSTÈME

J'ai une source XML qui utilise un point (".") en tant que séparateur décimal et je l'analyse sur un système qui utilise une virgule (",") comme séparateur décimal.

En conséquence, la valeur de 0,7 est analysée avec double.tryparse ou double.parse comme 7000000.

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


0 commentaires

4 Réponses :


11
votes

double.tryparse a une surcharge prenant un iFormatProvider. Utilisez un culture correspondant, dans votre cas, la cultureInfo.invarianTculture peut être utilisée.


1 commentaires

Un exemple aurait été apprécié, pour les types de paresseux américains.



18
votes

Cela fait le travail: xxx


1 commentaires

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



25
votes

La norme XML est explicite sur la mise en forme des dates et des chiffres, etc. Cela aide à s'assurer que le XML est indépendant indépendant et interopérable. Jetez un oeil à l'aide d'utiliser xmlconvert pour les données XML. < Pré> xxx


3 commentaires

C'est une bonne recommandation que de nombreuses personnes ne sont pas au courant de la classe XMLConvert. Ceci est particulièrement important lorsque vous travaillez avec des valeurs DateTime.


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


@Chris il donne une chaîne d'entrée n'était pas dans l'erreur de format correct. Comment pouvons-nous garder, comme séparateur?



9
votes

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

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


0 commentaires