C # Tausend Trennzeichen Problem mit Dezimal.Transparse

8

Ich bin mir nicht sicher, wie dies in C # richtig geparst werden kann, aber ich möchte, dass es in dem Fall fehlschlägt, in dem das Komma nicht bei jedem wiederholbaren dreifachen Wert getrennt ist. Beispiel: 1.123.23 sollte passen, aber 11.23.23 sollte in meinem Sinne scheitern. Aber die tatsächliche Ausgabe ist, dass tryparse immer wahr zurückgibt, unabhängig davon, wo die Komma-Position vor dem Komma liegt.

Bearbeiten: Antwort mit Regex wird akzeptiert, da es sich um einen Fehler handelt. Danke.

%Vor%     
stackdisplay 28.11.2015, 13:26
quelle

5 Antworten

3

Wie Sie festgestellt haben, erzwingt NumberStyles.AllowThousands das Komma nicht am richtigen Ort. Also ich denke ein regulärer Ausdruck kann dir hier helfen:

%Vor%     
Wouter Huysentruit 28.11.2015, 13:48
quelle
4

Ich habe ein paar verschiedene Codes ausgeführt und festgestellt, dass wenn Sie AllowThousands anwenden, die einzige Einschränkung für die Stelle von "," ist, dass sie auf dem ganzzahligen Teil der Zahl stehen sollte.

einige Ergebnisse:

  • "123,, 3.12" = & gt; pass
  • "123,, 3.1,3" = & gt; scheitern
ananda 28.11.2015 13:47
quelle
3
Ich weiß nicht, ob das hilft, aber ich denke, ich sollte es versuchen. Ich denke, meine Antwort ist ein wenig, aber geradlinig, nur wenn das Anliegen das Format ist, habe ich es auf einem .ToString vergleichen lassen ("format specified"); und vergleiche es mit deiner "Preis" -Zeichenkette. Nur meine 2 Cent.

%Vor%     
ken lacoste 28.11.2015 13:52
quelle
2

Sie haben zwei akzeptable Formate, so dass Sie überprüfen können, ob die Zahl analysierbar ist, und wenn dies der Fall ist, prüfen Sie, ob es sich um ein akzeptables Format handelt:

%Vor%     
Andrew Morton 28.11.2015 14:05
quelle
2

Was Sie entdeckt haben, ist eindeutig ein Fehler. Ich empfehle dringend, hier nicht stecken, stattdessen implementieren Sie einen Workaround. (und auch KISS anwenden).

Wenn dieser Code-Teil nicht zig-mal in einem hohen mathematischen Algorithmus ausgeführt wird oder auf andere Weise leistungskritisch ist, ist hier eine einfache Problemumgehung.

(Angenommen, die Strings verwenden ',' (Komma) als Tausendertrennzeichen. (Und sie sind kein Dezimaltrennzeichen, wie es eine Kultur sein könnte)):

%Vor%     
g.pickardou 28.11.2015 13:56
quelle

Tags und Links