TryParse fehlgeschlagen mit negativen Zahlen

7

Ich habe ein Problem damit, dass TryParse für mich korrekt funktioniert. Ich habe eine Liste von Werten, von denen ich fast sicher bin, dass sie gültig sind (da sie von einer anderen Komponente in unserem System kommen), aber ich möchte sicherstellen, dass eine korrekte Fehlerbehandlung vorhanden ist.

Hier ist eine Beispielliste meiner Werte:

20.00
20.00 Uhr -150,00

Und hier ist die Methode, die ich ursprünglich geschrieben habe:

%Vor%

Die Variable 'successful' gab für -150,00 den Wert false zurück, also fügte ich NumberStyles hinzu:

%Vor%

Aber jetzt, da ich die NumberStyles dort habe, wird keine der Zahlen parsen! Ich fühle mich gut, wenn IFormatProvider auf null gesetzt ist, da dies alles in unserem System ist. Kann jemand sehen, was ich falsch mache?

    
Jeannine 07.02.2011, 18:55
quelle

6 Antworten

3

Die anderen Antworten haben die richtige Idee in Bezug auf die richtige Verwendung von Decimal.TryParse . Wenn ich jedoch die betreffende Methode schreiben würde, würde ich LINQ verwenden, um mit LINQ-to-XML-Objekten zu arbeiten:

%Vor%

Diese Version funktioniert genauso, aber sie verwendet die Methode Enumerable.Sum Berechnen Sie die Summe. Alles, was ich liefern muss, ist eine Inline-Funktion, die Dezimalzahlen aus einem XElement extrahiert.

    
Joel Mueller 07.02.2011, 19:58
quelle
11

Dies ist nicht, wie Sie TryParse verwenden sollen.

TryParse gibt einen booleschen Wert (true / false) zurück, also sollte der obige Code lauten:

%Vor%

oder kürzer gesagt,

%Vor%     
Chris Shain 07.02.2011 18:58
quelle
4

Andere erklären, wie man es richtig macht, aber nicht wirklich erklären, was Sie falsch machen.

Wo Sie "erfolgreich" oben verwenden, ist nicht der Erfolgswert, es ist die tatsächliche Zahl, die analysiert wird. Wenn Sie also "-150.00" analysieren, ist das natürlich negativ. Der out-Wert von TryParse ist der tatsächlich analysierte Wert und der boolesche Wert, der angibt, ob der Prozess erfolgreich war oder nicht, ist der zurückgegebene Wert. Verwenden Sie, was Sie verstehen müssen, wäre etwas wie:

%Vor%

In diesem Fall ist isSuccessful WAHR, numericValue ist -150. Wenn Sie vom Benutzer bereitgestellte Werte anstelle des oben beschriebenen fest codierten Werts verwenden, sollten Sie Folgendes überprüfen:

%Vor%     
McAden 07.02.2011 19:32
quelle
1

Ihr Erfolg wird für einen negativen Wert, der analysiert wird, negativ sein. Dein if (successful > 0) ist was dich auslöst.

Wenn sie fast positive Werte sind, versuchen Sie es mit Convert.ToDecimal :

%Vor%

Ansonsten ändern Sie Ihre Logik ein wenig, um mehr wie folgt zu sein:

%Vor%     
Brad Christie 07.02.2011 18:58
quelle
0

Ich würde vorschlagen, dass Sie XElement mitteilen, nach welchem ​​Knotenwert er suchen soll:

%Vor%

Anstelle von XElement.Value. zumindest würde ich das tun:)

    
ncoder83 07.02.2011 18:58
quelle
0

kam von Google. Antwort für mich war die eingehende Kultur war falsch - speziell in einer eingehenden JSON-Datei.

Verwenden Sie

%Vor%

oder

%Vor%     
kjhf 03.06.2016 20:04
quelle

Tags und Links