2013-06-04 1 views
4

Je travaille avec des workflows dans Sharepoint 2007. Dans le workflow, j'accède à un Inforpath à partir du code derrière et ajoute des valeurs récurrentes à une liste Sharepoint.Decimal.Parse/Double.Parse renvoie une valeur sans le point décimal

string strProfitMargin = ProfitMargin; 

decimal margin1 = decimal.Parse(strProfitMargin); 

listItem["Test9"] = Math.Round(margin1, 2).ToString(); 

On suppose pour le ProfitMargin je reçois une valeur "0.4230769230769231".

Decimal.Parse Méthode Retourne 4230769230769231 sans le point décimal. En fin de compte, Math.Round ne fonctionne pas non plus. Cela fonctionne parfaitement dans ma machine. Mais dans les serveurs QA Son ne fonctionne pas. S'il vous plaît aidez-moi et expliquer pourquoi la méthode decimal.Parse ne fonctionne pas? Même chose pour double.Parse() renvoie une valeur sans décimal.

Merci à l'avance!

+1

'decimal.Parse (" 0.4230769230769231 ")' renvoie '0.4230769230769231' pour moi. Dans quelle culture est-ce que cela se passe? – Oded

+0

Nos serveurs sont en Allemagne. Je pense que ça devrait être "DE-DE". Est-ce la raison.Thanx. – SPKan

+0

Oui, le plus probable. Cette culture utilise ',' pour un séparateur décimal. Analyser en utilisant 'CultureInfo.InvariantCulture' ou utiliser un littéral décimal qui utilise', 'au lieu de', '. – Oded

Répondre

6

Ma forte suspicion est que vous courez sur une machine avec une culture qui n'utilise pas . comme point décimal.

Spécifiez la culture explicitement, par ex. à la culture invariante

decimal margin1 = decimal.Parse(strProfitMargin, CultureInfo.InvariantCulture); 
+0

Merci, je vais essayer cette méthode. Nos serveurs sont en Allemagne. Mais il existe déjà des méthodes Double.Parse() dans les composants Web qui fonctionnent correctement. Merci pour votre réponse. – SPKan

+1

Thanx cela a fonctionné. – SPKan