Ich bekomme eine Ausnahme, wenn ich versuche, eine Zahl in wissenschaftlicher Notation zu analysieren. Andere Beiträge darüber, wie es geht, und ich kann nicht sagen, was ich anders mache als diese.C#: Wissenschaftliche Notation String zu Int64-Konvertierung fehlgeschlagen
Ich habe versucht, die folgenden:
System.Convert.ToInt64("1.0206e+06");
System.Convert.ToInt64("1.0206E+06"); // Uppercase 'E'
Diese resultieren in einer Format: Eingabezeichenfolge war nicht im richtigen Format.
Ich habe versucht, diese:
Int64.Parse("1.0206e+06", System.Globalization.NumberStyles.Any);
Int64.Parse("1.0206e+06", System.Globalization.NumberStyles.Any, System.Globalization.CultureInfo.InvariantCulture);
Int64.Parse("1.0206e+06", System.Globalization.NumberStyles.Float, System.Globalization.CultureInfo.InvariantCulture);
Diese alle Ergebnis in einem Overflow: Wert zu groß oder zu klein war.
versuchte auch mit Int32.Parse
und bekam die gleiche Ausnahme und Nachricht:
(long)Int32.Parse(str, System.Globalization.NumberStyles.Any, System.Globalization.CultureInfo.InvariantCulture);
Mit Decimal.Parse
Arbeiten mit der gleichen Zeichenkette und Parameter an sie übergeben:
(long)Decimal.Parse(str, System.Globalization.NumberStyles.Any, System.Globalization.CultureInfo.InvariantCulture);
This answer schlägt dies mit:
Double.Parse("1.234567E-06", System.Globalization.NumberStyles.Float);
Welche ist meinem letzten Beispiel ähnlich, ich akzeptiere einfach alle Zahlenarten, und diese Antwort verwendet einen negativen Exponenten. Tatsächlich fütterte ich diese exakte Zeichenfolge in meine Beispiele und ich bekomme immer noch dieselben Ausnahmen.
Nicht sicher, ob es wichtig ist, aber ich verwende Mono C#, die Version, die mit Unity kommt.
Hier ist die C# Quelldatei: https://github.com/Unity-Technologies/mono/blob/unity-staging/mcs/class/corlib/System/Int64.cs. Die Ausnahme wird in Zeile 469 ausgelöst und stellt mir vor diesem Zeitpunkt keinen Aufruf-Stack zur Verfügung. Aber ich vermute, dass die Ausnahme in Zeile 355 oder 372 erstellt wird, da diese dem Ausnahmetyp und der Nachricht entsprechen, die mir angezeigt werden.
Dies funktioniert, wenn ich es in Dotnet Geige laufen, siehe https://dotnetfiddle.net/lHWbgM – konkked
Diese funktioniert nicht, wenn ich es in Dotnet Geige laufen: https://dotnetfiddle.net/PvGfoW EDIT : Eines der beiden Beispiele funktioniert. –
bedeutete die Überladungen, die Zahlenarten haben, die erste wird nicht funktionieren – konkked