Ich muss die Zeichenfolge "1.2345E-02" (eine Zahl in Exponentialschreibweise) auf einen dezimalen Datentyp analysieren, löst aber Decimal.Parse("1.2345E-02")
einfach einen Fehler aus
c#
.net
number-formatting
exponent
Jimbo
quelle
quelle
decimal
durchdouble
in meinem Code funktioniert für mich gut, genau wie ich es erwarten würde. Wenn Sie Details zu dem, was Sie versuchen, dem von Ihnen verwendeten Code und dem Ergebnis angeben könnten , wäre es viel einfacher zu helfen.Zusätzlich zur Angabe der NumberStyles würde ich empfehlen, dass Sie die Funktion decimal.TryParse verwenden, z.
Als Alternative zu NumberStyles. Sie können einen bestimmten Satz verwenden, wenn Sie sich Ihrer Formate sicher sind. z.B:
quelle
quelle
Seien Sie vorsichtig mit der ausgewählten Antwort: Es gibt eine Subtilität, die System.Globalization.NumberStyles.Float in Decimal.Parse angibt. Dies kann zu einer System.FormatException führen, da Ihr System möglicherweise auf eine mit ',' anstelle von ' formatierte Zahl wartet.
In der französischen Notation ist beispielsweise "1.2345E-02" ungültig. Sie müssen es zuerst in "1.2345E-02" konvertieren.
Verwenden Sie abschließend etwas in der Art von:
quelle
Ich habe festgestellt, dass das Übergeben in
NumberStyles.Float
einigen Fällen die Regeln ändert, nach denen die Zeichenfolge verarbeitet wird, und zu einer anderen Ausgabe führt alsNumberStyles.Number
(die von verwendeten Standardregelndecimal.Parse
).Der folgende Code generiert beispielsweise ein
FormatException
in meinem Computer:Ich würde empfehlen, die Eingabe zu verwenden
NumberStyles.Number | NumberStyles.AllowExponent
, da dies Exponentialzahlen zulässt und die Zeichenfolge weiterhin gemäß dendecimal
Regeln verarbeitet.Um die Frage des Posters zu beantworten, sollte die richtige Antwort stattdessen lauten:
quelle
Warnung zur Verwendung von NumberStyles.Any:
"6.33E + 03" wird wie erwartet in 6330 konvertiert. Im Deutschen werden Dezimalstellen durch Kommas dargestellt, aber 6,33E + 03 werden in 633000 konvertiert! Dies ist ein Problem für meine Kunden, da die Kultur, die die Daten generiert, nicht bekannt ist und sich möglicherweise von der Kultur unterscheidet, die mit den Daten arbeitet. In meinem Fall habe ich immer eine wissenschaftliche Notation, daher kann ich vor dem Parsen immer das Komma durch einen Dezimalpunkt ersetzen. Wenn Sie jedoch mit beliebigen Zahlen wie hübsch formatierten Zahlen wie 1.234.567 arbeiten, funktioniert dieser Ansatz nicht.
quelle
Sie müssen die Punkte (bzw. Kommas) nicht ersetzen, sondern geben nur die Eingabe IFormatProvider an:
quelle
Wenn Sie den Exponentenwert überprüfen und konvertieren möchten, verwenden Sie diesen
Hoffe das hilft jemandem.
quelle