C # dezimal.Parsenverhalten

7

Kurze Frage:

Warum sind diese < ..... für die Syntaxanalyse einer Dezimalzahl in .NET (C #) gültig:

%Vor%

Was ist der Grund dafür?

    
juFo 13.01.2011, 08:27
quelle

3 Antworten

18

Es scheitert für mich. Bist du zufällig in einer Kultur, in der "." ist das Tausendertrennzeichen und "," ist der Dezimalpunkt? Decimal.Parse (und ähnliche Aufrufe) verwenden standardmäßig die aktuelle Kultur des Threads. Ob das eine gute Sache ist oder nicht, ist fraglich, aber irrelevant für das tatsächliche Verhalten:)

Geben Sie CultureInfo.InvariantCulture im Aufruf decimal.Parse an:

%Vor%

Ich glaube, das wird sich so verhalten, wie Sie es erwartet haben.

    
Jon Skeet 13.01.2011, 08:30
quelle
2

Ich würde mir vorstellen, dass es daran liegt, dass der Parser sich nicht wirklich um Gruppenseparatoren kümmert - sie sind irrelevant für die Umwandlung einer Zeichenfolge in eine Dezimalzahl.

Wir nennen sie Tausendertrennzeichen, aber das sind sie wirklich nicht. Sie sind Gruppenseparatoren - Sie könnten alle 3 Ziffern, alle 10 Ziffern, jede 1 Ziffer teilen, also warum nicht alle 0 Ziffern?

Interessanterweise hat sich der Code für .NET 4 geändert - das ist die relevante Ausgabe von Reflector für mich:

%Vor%     
RB. 13.01.2011 10:03
quelle
1

Ich weiß nicht warum, aber ich weiß, wie es funktioniert (Dezimal-Parser-Code-Teil siehe unten). Ich denke letztens, wenn man nur Punktflagge anstellt und alle Punkte überspringt.

%Vor%

Verwenden Sie das Reflector-Tool, um den gesamten Code zu untersuchen.

    
SeeSharp 13.01.2011 08:42
quelle

Tags und Links