2017-09-04 1 views
1

Ich versuche, Doppel zu analysieren aus einer Zeichenfolge mit dem folgenden Code infering:Umwandlung von String zu Double ist nicht richtig

double.TryParse(contractResult.Result.ValueWithDiscount, NumberStyles.Any, CultureInfo.InvariantCulture, out ValueWithDiscount); 
double.TryParse(contractResult.Result.DebitValue, NumberStyles.Any, CultureInfo.InvariantCulture, out Value); 

Aber aus irgendeinem Grunde funktioniert es nicht. Ich habe zwei Server, die unterschiedliche Konfigurationen voneinander haben. Und man wird eine "0.5" zu 0.5 Parsing aber die andere ist zu 5 zu analysieren.

Ich habe auch versucht zu verwenden:

double.TryParse(contractResult.Result.DebitValue, NumberStyles.Any, CultureInfo.CurrentCulture, out Value); 

Aber dann der Server, wurde das Parsen gestartet richtig 50 statt 0.5 zu analysieren. Irgendein Tipp warum es passiert?

Update - Werte mit dem folgenden Code:

NumberFormatInfo loNumberFormatInfo = new NumberFormatInfo(); 
loNumberFormatInfo.NumberDecimalSeparator = "."; 
loNumberFormatInfo.NumberGroupSeparator = ","; 
double ValueWithDiscount = 0.0; 
double.TryParse(contractResult.Result.ValueWithDiscount, NumberStyles.Any, loNumberFormatInfo, out ValueWithDiscount);  
logger.Log("ValueWithDiscount: " + contractResult.Result.ValueWithDiscount); 
logger.Log("ValueWithDiscount Parsed: " + ValueWithDiscount); 

Server, das funktioniert:

ValueWithDiscount: 0.50 
ValueWithDiscount Parsed: 0,5 

Server, der nicht funktioniert:

ValueWithDiscount: 0,5 
ValueWithDiscount Parsed: 5 
+0

Ich weiß nicht, ob dies die Antwort ist, aber ich hatte einmal ein ähnliches Problem, das sich herausstellte, die Standorteinstellungen und verschiedene Regionen zu verwenden. oder für Dezimalzahlen. –

+0

Können Sie einen [MCVE] (https://stackoverflow.com/help/mcve) hinzufügen? Sie können beispielsweise [.NETFiddle] (https://dotnetfiddle.net/) verwenden. – aloisdg

+0

Auf der Maschine, die nicht funktioniert, bist du ** 100% sicher, dass die Zeichenfolge "0,5" ist? Könnte es vielleicht "0,5" sein? Können Sie uns zeigen, wo 'contractResult.Result.ValueWithDiscount' eingetragen ist? – mjwills

Antwort

2

Wenn Sie immer benutze einen "." Als Dezimaltrennzeichen können Sie eine fixe FormatInfo zum Konvertieren verwenden.

NumberFormatInfo loNumberFormatInfo = new NumberFormatInfo(); 
loNumberFormatInfo.NumberDecimalSeparator = "."; 
loNumberFormatInfo.NumberGroupSeparator = ","; 

double ldOut; 
double.TryParse("0.5", NumberStyles.Any, loNumberFormatInfo, out ldOut); 

Update:

Wenn die Zeichenfolge enthält "" und "," können Sie "," vor dem Konvertieren ersetzen.

+0

wird einen Versuch geben;) –

+0

es konvertiert zu 5. –

+0

Sind Sie sicher, dass der Wert "0.5" zu "5" analysieren? – PinBack

Verwandte Themen