2010-10-22 5 views
4

Je suis en train d'analyser des valeurs telles que 15,270.75 $ avec l'expressionne peut pas analyser deux

double cost = 0; 
double.TryParse("$15,270.75", NumberStyles.AllowThousands | NumberStyles.AllowCurrencySymbol | NumberStyles.AllowDecimalPoint, CultureInfo.InvariantCulture, out cost); 

mais ont sans succès

+1

Vous obtenez une erreur ou n'obtenez pas le résultat souhaité? –

Répondre

8

Le symbole monétaire de la culture Invariante n'est pas $, c'est ¤. Cela fonctionne:

double cost = double.Parse("¤15,270.75", NumberStyles.AllowThousands | NumberStyles.AllowCurrencySymbol | NumberStyles.AllowDecimalPoint, CultureInfo.InvariantCulture); 

Vous aurez besoin d'un CultureInfo qui soutient exactement ce format.

1

c'est parce que vous utilisez InvariantCulture. Vous avez besoin d'une Culture américaineInfos

+0

Les Américains ne sont pas les seuls à utiliser '$';) – Ozzah

1

Cela ne fonctionnera pas avec la culture CultureInfo.Invariant. Utilisez un CultureInfo approprié.

4

Les travaux suivants:

var culture = new CultureInfo("en-US"); 

culture.NumberFormat.CurrencyGroupSeparator = "."; 
culture.NumberFormat.CurrencyDecimalSeparator = ","; 

double.TryParse("$15.270,75", NumberStyles.AllowThousands | NumberStyles.AllowCurrencySymbol | NumberStyles.AllowDecimalPoint, culture, out cost); 

La culture est ici je en États-Unis pour le symbole $. La raison pour laquelle je définis manuellement les séparateurs de groupe et décimal est parce que le format utilisé dans la chaîne d'entrée est différent de la culture de en-US. Peut-être que vous attendez une culture spécifique qui n'est pas en-US. Essayez de passer celui-là.

0

Si vous voulez quelque chose qui fonctionne pour tous les paramètres régionaux, utilisez CultureInfo.CurrentCulture pour le paramètre IFormatProvider.

Questions connexes