Parsen von string zu float-Zahl in C#
Ich habe float-Zahl in string. es gibt ein problem. Number verwendet "." nicht "," als Dezimaltrennzeichen.
Dieser code funktioniert nicht:
MyNumber = float.Parse("123.5");
Weiß ich, dass ich die Verwendung von string-ersetzen-Funktion "reparieren" in diesem string vor dem Parsen.
MyNumber = float.Parse("123.5".Replace('.',',');
Aber es ist eine andere Art, es zu tun?
Du musst angemeldet sein, um einen Kommentar abzugeben.
Hinzufügen zu Steven ' s Frage, eher als anders argumentieren, das wichtigste ist warum das Dezimaltrennzeichen ist
.
.Wenn es ist, weil die Quelle in einem computer-lesbaren format, wo die Zeit dezimal-Trennzeichen angegeben, wird als Teil des Dokument-Spezifikation, dann würde ich gehen, genau wie Steven in mit
CultureInfo.InvariantCulture
.Wenn es menschliche Eingabe in einem bestimmten Gebietsschema, dann würden Sie wollen, zu entsprechen, die Gebietsschema an, indem Sie die
CultureInfo
für die entsprechende Gebietsschema, sonst wird die software mit einem anderen Gebietsschema würden Sie genau das gegenteilige problem. In der Regel würden Sie wollen, um die thread ' sCurrentCulture
passend zu diesem (CurrentCulture
für FormateCurrentUICulture
für Sprachen). Wenn Sie dies getan haben, dann brauchen Sie sich nicht übergeben zu müssen, eine Kultur, als die formfloat.Parse(string)
verwendet, die Kultur - aber möchten Sie vielleicht zu verwendenfloat.Parse(string, CurrentCulture)
explizit, dass dies ist, was Sie tun (und zu schließen, bis einige software-Analyse, die sich beschwert wenn Sie nicht bestimmte auf diese Weise).Bekommt was wirklich schwierig ist, wenn Sie potenziell zu akzeptieren haben beide Punkt und Komma - nicht zuletzt, weil viele Kulturen verwenden Zeitraum als dezimal-separator, verwenden Sie ein Komma als Tausender-Trennzeichen, und letztlich ist es unmöglich zu garantieren eindeutige Analyse. Jedoch, vorausgesetzt, die Tausende Problem betrifft ja nicht Sie, dann der code, den Sie gab, die in Ihrer Frage ist der Ansatz, obwohl ich empfehlen würde, das Gegenteil zu tun (ersetzen Sie das Komma mit der Periode) und anschließend die Analyse mit der Invarianten Kultur entfernt, dass keine weiteren Komplikationen verursacht durch noch mehr Kultur ändert.
Hilfe von string ersetzen, ist sehr zerbrechlich, und führen zu suttle bugs. Geben Sie die
IFormatProvider
statt. Zum Beispiel:Oder Sie können angeben, die
NumberFormatInfo
mit einer anderen überladung derParse
.nl-NL
und nichtCultureInfo.InvariantCulture
?CultureInfo.CurrentCulture
von der OP hat,
als Dezimaltrennzeichen. Die Niederländische Kultur (nl) tatsächlich verwendet,
als Dezimaltrennzeichen und wird daher nicht zu arbeiten. So der trick ist eigentlich eine Kultur, die verwendet.
als Dezimaltrennzeichen wie "en-US" und die invariante Kultur. Vielen Dank, dass diese bis.Hängt es von der aktuellen Kultur der aktuell ausgeführte thread-Kultur.
WENN Sie ausdrücklich nicht wollen, culturespecific dann