Frage

Was ist der beste Weg, einen Float in CSharp zu analysieren?Ich kenne TryParse, aber was mich besonders wundert, sind Punkte, Kommas usw.

Ich habe Probleme mit meiner Website.Auf meinem Entwicklungsserver steht das ',' für Dezimalstellen, das '.' für das Trennzeichen.Auf dem Produktserver ist es jedoch umgekehrt.Wie kann ich das am besten einfangen?

War es hilfreich?

Lösung

Hängt davon ab, woher die Eingabe kommt.

Wenn Ihre Eingabe vom Benutzer stammt, sollten Sie die CultureInfo verwenden, die der Benutzer/die Seite verwendet (Thread.CurrentThread.CurrentUICulture).

Sie können einen Hinweis auf die Kultur des Benutzers erhalten, indem Sie sich die ansehen HttpRequest.UserLanguages Eigentum.(Nicht 100 % korrekt, aber ich fand es eine sehr gute erste Vermutung) Mit diesen Informationen können Sie das festlegen Thread.CurrentThread.CurrentUICulture am Anfang der Seite.

Wenn Ihre Eingabe aus einer internen Quelle stammt, können Sie die verwenden InvarianteKultur um die Zeichenfolge zu analysieren.

Die Parse-Methode ist etwas einfacher zu verwenden, wenn Ihre Eingabe aus einer kontrollierten Quelle stammt.Das heißt, Sie haben die Zeichenfolge bereits validiert.Parse löst eine (langsame) Ausnahme aus, wenn es fehlschlägt.

Wenn die Eingabe unkontrolliert erfolgt (vom Benutzer oder einer anderen Internetquelle), wird die TryParse sieht für mich besser aus.

Andere Tipps

ich mit leppie Antwort zustimmen; dass in Bezug auf Code zu setzen:

string s = "123,456.789";
float f = float.Parse(s, CultureInfo.InvariantCulture);

Sie können immer die Überlastung von Parse , die das beinhaltet Kultur zu benutzen?

Zum Beispiel:

double number = Double.Parse("42,22", new CultureInfo("nl-NL").NumberFormat); // dutch number formatting

Wenn Sie die Kontrolle über alle Daten verfügen, sollten Sie „CultureInfo.InvariantCulture“ in allen Ihren Code verwenden.

Wenn Sie anhalten wollen Werte (Zahlen, Datum, Zeit, etc ...) für interne Zwecke. Jedes Mal Gebrauch „InvariantCulture“ für die Formatierung und Parsing-Werte. "InvariantCulture" ist das gleiche auf jedem Computer, jedes O Zusammenarbeit mit Benutzer-Kultur / Sprache / etc ...

string strFloat = (15.789f).ToString(System.Globalization.CultureInfo.InvariantInfo);
float numFloat  = float.Parse(System.Globalization.CultureInfo.InvariantInfo, strFloat);
string strNow   = DateTime.Now.ToString(System.Globalization.CultureInfo.InvariantInfo);
DateTime now    = DateTime.Parse(System.Globalization.CultureInfo.InvariantInfo, strNow);

Verwenden Sie eine neutrale Kultur (oder eine Sie wissen), wenn sie mit Try / Parse-Parsing.

Der Pass in einer Culture oder Number , das die Kultur darstellt, die Sie wollen den Schwimmer analysieren als ; diese steuert, welche Zeichen für Dezimalstellen verwendet, Gruppentrennzeichen usw.

Zum Beispiel, um sicherzustellen, dass die ‚‘ Zeichen als Dezimaltrennzeichen behandeln Sie in CultureInfo.InvariantCulture (dies ist in der Regel sehr nützlich bei der Server-Anwendungen, bei denen Sie neigen dazu, Dinge zu wollen, die gleichen, unabhängig von der Umwelt der Kultur sein) passieren könnten.

Versuchen float.Parse zu vermeiden, verwenden Sie TryParse statt, da es viel besser abschneidet, aber macht die gleiche Arbeit. dies gilt auch verdoppeln, Datum- und etc ...

(einige Arten auch TryParseExact anbieten, die auch noch besser abschneidet!)

Die Quelle ist eine Eingabe von einer Website. Ich kann nicht auf sie verlassen gültig zu sein. Also ging ich mit TryParse wie zuvor erwähnt. Aber ich kann nicht herausfinden, wie die Current, um es zu geben.

Auch dies würde mir die Kultur des Servers es aktuell läuft, aber da es das World Wide Web ist, kann der Benutzer von überall sein ...

Mit einer einfachen Anweisung können Sie die aktuelle Konfiguration Ihres Servers ermitteln:

System.Globalization.CultureInfo culture = System.Globalization.CultureInfo.CurrentCulture;

Beachten Sie, dass es eine CurrentUICulture-Eigenschaft gibt, UICulture jedoch von ResourceMeanager für mehrsprachige Anwendungen verwendet wird.Für die Zahlenformatierung müssen Sie CurrentCulture berücksichtigen.

ich hoffe, dies wird dir helfen

Da Sie nicht wissen, die Kultur des Web-Benutzer, können Sie einige Vermutungen tun. TryParse mit einer Kultur, die für Separatoren verwendet, und. für Dezimal, und TryParse mit einer Kultur, die verwendet wird. für Separatoren und zum Dezimal. Wenn sie beide Erfolg haben aber ergeben unterschiedliche Antworten dann werden Sie den Benutzer fragen haben, die sie bestimmt sind. Ansonsten können Sie gehen normalerweise, da Ihre zwei gleichen Ergebnisse oder ein brauchbares Ergebnis oder kein brauchbares Ergebnis.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top