Я обнаружил, что передача NumberStyles.Float
в некоторых случаях изменяет правила обработки строки и приводит к выводу, отличному от NumberStyles.Number
(правила по умолчанию, используемые decimal.Parse
).
Например, следующий код сгенерирует FormatException
на моем компьютере:
CultureInfo culture = new CultureInfo("");
culture.NumberFormat.NumberDecimalDigits = 2;
culture.NumberFormat.NumberDecimalSeparator = ".";
culture.NumberFormat.NumberGroupSeparator = ",";
Decimal.Parse("1,234.5", NumberStyles.Float, culture); // FormatException thrown here
Я бы порекомендовал использовать ввод NumberStyles.Number | NumberStyles.AllowExponent
, так как это разрешит экспоненциальные числа и все еще будет обрабатыватьсястрока под decimal
правилами.
CultureInfo culture = new CultureInfo("");
culture.NumberFormat.NumberDecimalDigits = 2;
culture.NumberFormat.NumberDecimalSeparator = ".";
culture.NumberFormat.NumberGroupSeparator = ",";
Decimal.Parse("1,234.5",NumberStyles.Number | NumberStyles.AllowExponent, culture); // Does not generate a FormatException
Чтобы ответить на вопрос автора, правильный ответ должен быть следующим:
decimal x = decimal.Parse("1.2345E-02", NumberStyles.Number | NumberStyles.AllowExponent);
Console.WriteLine(x);