Für den ersten Fall von Microsoft Source Code Reference, standardmäßig implementiert Int32.Parse
NumberStyles.Integer aber nicht NumberStyles.AllowThousands
public static int Parse(String s) {
return Number.ParseInt32(s, NumberStyles.Integer, NumberFormatInfo.CurrentInfo);
}
So jeder Kommaseparator nicht zulässig ist. Dies:
Int32.Parse("1,234");
oder
Int32.Parse("1.234");
werden beide falsch sein. In irgendeine Kultur.
Int32.Parse("1,234", NumberStyles.Integer | NumberStyles.AllowThousands);
Aber
Int32.Parse("1.234", NumberStyles.Integer | NumberStyles.AllowThousands);
noch throw
ein Exception
: in EN-US
Kultur analysiert werden
es zu beheben, NumberStyles.AllowThousands
muss die NumberStyles
hinzugefügt werden, die "1.234" ermöglicht.
Für die zweiten Fall nach Microsoft Code Source Reference, ist der Standardstil für Single.Parse
:
public static float Parse(String s) {
return Parse(s, NumberStyles.Float | NumberStyles.AllowThousands, NumberFormatInfo.CurrentInfo);
}
Welche thousands separator ermöglicht. Und ","
wird als Tausendertrennzeichen in EN-US
Kultur anerkannt, für Single.Parse
und Sie somit den zweiten Fall richtig
Single.Parse("1,234"); //OK
analysiert erhalten und offensichtlich „1.234“ auch richtig sein, mit der Ausnahme, dass „“ wird nicht als Tausendertrennzeichen, sondern als Dezimaltrennzeichen erkannt.
Was die dritten Fall, Internally, Single.Parse
TryStringToNumber
Anrufe und Parse.Number, die die Tausendertrennzeichen einfach ignorieren würde. So erhalten Sie:
Single.Parse("1,2,3,4"); //Returns 1234
Weil es gleichwertig ist wie
Single.Parse("1234"); //Returns 1234
Interessant .. 'Single.Parse (" 1,2,3,4 ", NumberFormatInfo.InvariantInfo);' gibt auch '1234' aus. – Sinatr
Hier gibt es keine Inkonsistenz. 'Int32.Parse()' ist standardmäßig auf 'NumberStyles.Integer' für das zweite Argument festgelegt, das das Tausendertrennzeichen nicht unterstützt. Auf der anderen Seite ist 'Single.Parse()' standardmäßig auf 'NumberStyles.Float | NumberStyles.AllowThousands', was, naja, tausende Separatoren erlaubt. Weitere Informationen finden Sie im Abschnitt Hinweise in [der Dokumentation zu letzterem] (https://msdn.microsoft.com/de-de/library/2thct5cb.aspx). –
@ FrédéricHamidi, das Problem ist drittes Beispiel. Keine Notwendigkeit, die erste oder zweite zu erklären. Können Sie erklären, warum "1,2,3,4" als "1234" -Wert geparst wird? Ich habe jetzt Angst um meine Benutzereingabefelder ... für alle! – Sinatr