web-dev-qa-db-fra.com

Comment utiliser Convert.ChangeType () lorsque conversionType est décimal et que l'entrée est "40,00"

Je veux dire, je veux convertir ceci:

string a = "40.00";
Convert.ChangeType(a, typeof(decimal))

le résultat est une valeur décimale de "4000"

le problème est que l'appel convert est dans une méthode générique très abstraite dans un convertisseur xmlToObject. Je ne veux pas ajouter par programme beaucoup d'exceptions différentes pour convertir correctement.

en ce qui concerne Chris

26
masterchris_99

Le point décimal peut ne pas être représenté par le caractère de période dans votre culture actuelle.

En général, lorsque vous effectuez des conversions invariantes par culture, il est préférable de spécifier CultureInfo.InvariantCulture comme argument IFormatProvider à méthode :

(decimal) Convert.ChangeType(a, typeof(decimal), CultureInfo.InvariantCulture);
42
Frédéric Hamidi

La conversion est très probablement effectuée à l'aide d'une culture qui utilise la période comme séparateur de milliers au lieu de séparateur décimal.

Spécifiez la culture lorsque vous convertissez la valeur:

Convert.ToDecimal(a, CultureInfo.InvariantCulture)
3
Guffa

Le code suivant

 string s = "40.00";
 decimal d = (decimal)Convert.ChangeType(s, typeof(decimal));

fait d = 40. Cela me va bien. Quel est votre problème exactement?

Edit: Il semble que vous ayez un problème avec la culture utilisée. Faites ceci pour la conversion:

string s = "40.00";
decimal d = (decimal)Convert.ChangeType(s, typeof(decimal), CultureInfo.InvariantCulture);
2
Adrian Zanescu