web-dev-qa-db-fra.com

Conversion chaîne/décimale: séparation des points au lieu de virgule

J'ai une chaîne lue dans une zone de texte. Il contient une virgule pour la séparation décimale.

J'ai NumberFormatInfo.CurrencyDecimalSeparator réglé sur , (virgule), mais lorsque je convertis la chaîne en décimal Convert.ToDecimal(mystring);, j'obtiens une valeur distincte pour les points pour décimal.

Exemple:

decimal a=Convert.ToDecimal("1,2345"); ----> decimal is 1.2345

J'ai essayé aussi:

double a=Convert.ToDouble("1,2345"); 

mais dot pour décimal à nouveau

26
LoveMyWife

Merci pour toute réponse.

Parce que je dois écrire un nombre décimal dans un fichier XML, j'ai découvert le problème. Dans this discussion, j’ai appris que le fichier xml utilise en standard un point pour une valeur décimale et qu’il n’est pas lié à la culture . Ma solution consiste donc à écrire un nombre décimal à point dans un fichier xml et à convertir la chaîne lue à partir du même fichier xml. mystring.Replace(".", ","); Merci Agat d’avoir suggéré de rechercher le problème dans un contexte XML et Ε И О car je ne savais pas que visual studio ne respectait pas les paramètres de culture définis dans mon code . 

2
LoveMyWife

Tout cela concerne les cultures. Si vous avez une culture autre que "US English" (et aussi de bonnes manières de développement), vous devriez utiliser quelque chose comme ceci:

var d = Convert.ToDecimal("1.2345", new CultureInfo("en-US"));
// (or 1,2345 with your local culture, for instance)

(évidemment, vous devriez remplacer le "en-US" par la culture de votre numéro culture locale )

de la même manière, si vous voulez faire ToString()

d.ToString(new CultureInfo("en-US"));
27
Agat

Au lieu de remplacer, nous pouvons forcer la culture comme

var x = decimal.Parse("18,285", new NumberFormatInfo() { NumberDecimalSeparator = "," });

il donnera sortie 18.285

15
Ashok Mandial

J'ai fini par utiliser cette solution.

decimal weeklyWage;
decimal.TryParse(items[2],NumberStyles.Any, new NumberFormatInfo() { NumberDecimalSeparator = "."}, out weeklyWage);
0
Gervo

Vous visualisez vos valeurs décimales ou doubles dans Visual Studio. Cela ne respecte pas les paramètres de culture que vous avez sur votre code.

Modifiez les paramètres de région et de langue de votre panneau de configuration si vous souhaitez que les valeurs decimal et double aient la virgule comme séparateur décimal.

0
Ε Г И І И О