Ich habe die Fließkommazahl in der Zeichenkette. Es gibt ein Problem. Nummer verwendet "." nicht "," als Dezimalpunkt.
Dieser Code funktioniert nicht:
%Vor%Ich weiß, dass ich String-Replace-Funktion verwenden kann, um diese Zeichenfolge vor dem Parsen zu reparieren.
%Vor%Aber gibt es einen anderen Weg, es zu tun?
Um Steven's Frage hinzuzufügen, ist die wichtige Sache warum das Dezimaltrennzeichen .
ist.
Wenn die Quelle in einem computerlesbaren Format ist, in dem das Punkt-Dezimal-Trennzeichen als Teil der Dokumentspezifikation angegeben ist, würde ich genau so verfahren, wie es Steven bei der Verwendung von CultureInfo.InvariantCulture
tut.
Wenn es sich um eine menschliche Eingabe in einem bestimmten Gebietsschema handelt, sollten Sie dieses Gebietsschema mit dem für dieses Gebietsschema geeigneten CultureInfo
abgleichen. Wenn die Software andernfalls mit einem anderen Gebietsschema verwendet wird, haben Sie genau das gegenteilige Problem. Im Allgemeinen möchten Sie die CurrentCulture
des Threads so anpassen, dass sie dem entspricht ( CurrentCulture
für Formate, CurrentUICulture
für Sprachen). Wenn Sie dies getan haben, müssen Sie keine Kultur mehr weitergeben, da die Form float.Parse(string)
diese Kultur verwendet. Sie können jedoch float.Parse(string, CurrentCulture)
verwenden, um explizit anzugeben, dass Sie dies tun (Und um die Software-Analyse zu stoppen, die sich beschwert, wenn Sie nicht auf diese Art spezifisch sind).
Was wirklich schwierig wird, ist, wenn Sie sowohl Punkt als auch Komma akzeptieren müssen - nicht zuletzt weil viele Kulturen, die Punkt als Dezimaltrennzeichen verwenden, Komma als Tausendertrennzeichen verwenden und es letztlich unmöglich ist, ein eindeutiges Parsen zu garantieren. Unter der Annahme, dass das Tausender-Problem Sie nicht betrifft, ist der Code, den Sie in Ihrer Frage angegeben haben, der Ansatz, obwohl ich das Gegenteil empfehlen würde (Komma durch Punkt ersetzen) und dann mit der invarianten Kultur analysieren, da dann alle entfernt werden weitere Komplikationen durch noch mehr Kulturveränderungen.
Es hängt von der aktuellen Kultur der aktuell ausgeführten Thread-Kultur ab.
%Vor%Wenn Sie strikt kulturspezifisch nicht wollen, dann
%Vor%Tags und Links string .net c# parsing floating-point