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
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 .
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"));
Au lieu de remplacer, nous pouvons forcer la culture comme
var x = decimal.Parse("18,285", new NumberFormatInfo() { NumberDecimalSeparator = "," });
il donnera sortie 18.285
J'ai fini par utiliser cette solution.
decimal weeklyWage;
decimal.TryParse(items[2],NumberStyles.Any, new NumberFormatInfo() { NumberDecimalSeparator = "."}, out weeklyWage);
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.