我在嘗試解析科學記數法中的數字時收到異常。看看如何做的其他職位,我不能告訴我在做什麼有別於那些。C#:科學記數法字符串到Int64轉換失敗
我已經試過如下:
System.Convert.ToInt64("1.0206e+06");
System.Convert.ToInt64("1.0206E+06"); // Uppercase 'E'
這些導致出現FormatException:輸入字符串的不正確的格式。
我嘗試這些:
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);
這些都導致發生OverflowException:值過大或過小。
與Int32.Parse
也試過,得到了同樣的異常和消息:
(long)Int32.Parse(str, System.Globalization.NumberStyles.Any, System.Globalization.CultureInfo.InvariantCulture);
使用Decimal.Parse
作品具有相同字符串參數傳遞給它:
(long)Decimal.Parse(str, System.Globalization.NumberStyles.Any, System.Globalization.CultureInfo.InvariantCulture);
This answer建議使用這樣的:
Double.Parse("1.234567E-06", System.Globalization.NumberStyles.Float);
其中類似於我的最後一個例子,我只接受所有數字樣式,並且該答案使用負指數。實際上,我將精確的字符串輸入到了我的示例中,而且我仍然會遇到相同的異常。
不知道它是否重要,但我使用的是Unity自帶的版本Mono C#。
以下是C#源文件:https://github.com/Unity-Technologies/mono/blob/unity-staging/mcs/class/corlib/System/Int64.cs。第469行拋出異常,並且在該點之前不提供調用堆棧。但我猜這個異常是在第355行或第372行創建的,因爲這些異常與我顯示的異常類型和消息相匹配。
這是工作,當我在DOTNET小提琴運行它,請參閱https://dotnetfiddle.net/lHWbgM – konkked
這不是工作,當我在DOTNET小提琴運行它:https://dotnetfiddle.net/PvGfoW 編輯:兩個例子中的一個確實有效。 –
意味着具有數字樣式的重載,第一個不會起作用 – konkked