После поиска в google, использование кода ниже не может быть скомпилировано
decimal h = Convert.ToDecimal("2.09550901805872E-05");
decimal h2 = Decimal.Parse("2.09550901805872E-05", System.Globalization.NumberStyles.AllowExponent);
После поиска в google, использование кода ниже не может быть скомпилировано
decimal h = Convert.ToDecimal("2.09550901805872E-05");
decimal h2 = Decimal.Parse("2.09550901805872E-05", System.Globalization.NumberStyles.AllowExponent);
Decimal h2 = 0;
Decimal.TryParse("2.005E01", out h2);
Вы также должны добавить NumberStyles.AllowDecimalPoint
:
Decimal.Parse("2.09550901805872E-05", NumberStyles.AllowExponent | NumberStyles.AllowDecimalPoint);
MSDN ясно говорит о том, что:
Указывает, что числовая строка может быть экспоненциальной. Флаг AllowExponent позволяет анализируемой строке содержать экспоненту который начинается с символа "E" или "e", а за ним следует необязательный положительный или отрицательный знак и целое число. Другими словами, это успешно разбирает строки в виде nnnExx, nnnE + xx и nnnE-xx. Он не позволяет десятичный разделитель или знак в значении или мантиссы; чтобы эти элементы в строке были проанализированы, используйте Флаги AllowDecimalPoint и AllowLeadingSign или использовать композитный стиль который включает эти отдельные флаги.
использовать System.Globalization.NumberStyles.Any
decimal h2 = Decimal.Parse("2.09550901805872E-05", System.Globalization.NumberStyles.Any);
Так как десятичный разделитель ( "." в вашей строке) может варьироваться от культуры к культуре он более безопасен для использования Инвариантной культуры. Не забудьте разрешить эту десятичную разделитель (NumberStyles.Float)
decimal h = Decimal.Parse("2.09550901805872E-05", NumberStyles.Float | NumberStyles.AllowExponent, CultureInfo.InvariantCulture);
Perharps, более удобный код - это когда мы используем NumberStyles.Any:
decimal h = Decimal.Parse("2.09550901805872E-05", NumberStyles.Any, CultureInfo.InvariantCulture);