Преобразование чисел с экспоненциальной нотацией из строки в двойную или десятичную

есть ли быстрый способ преобразования чисел с экспоненциальной нотацией (примеры: "0.5e10 " или "- 5e20") до десятичной или двойной?

обновление: нашел проанализировать число из экспоненциальной нотации но примеры не будут работать для меня, если я не указал культуру.

устранение:

double test = double.Parse("1.50E-15", CultureInfo.InvariantCulture);

4 ответов


если культура использует . как десятичный разделитель, просто double.Parse("1.50E-15") должны работать.

если ваша культура использует что-то еще (например,,) или вы хотите убедиться, что ваше приложение работает одинаково на каждом компьютере, вы должны использовать InvariantCulture:

double.Parse("1.50E-15", CultureInfo.InvariantCulture)

стандартный double.Parse или decimal.Parse методы делают работу здесь.

примеры:

// AllowExponent is implicit
var number1 = double.Parse("0.5e10");
Debug.Assert(number1 == 5000000000.0);

// AllowExponent must be given explicitly
var number2 = decimal.Parse("0.5e10", NumberStyles.AllowExponent);
Debug.Assert(number2 == 5000000000m);

Также см. статью MSDN Разбор Числовых Строк для получения дополнительной информации. Пока NumberStyles.AllowExponent опция указывается в Parse метод (который по умолчанию для double), разбор таких строк будет работать нормально.

NB: как указывает спрашивающий, экспоненциальный например, обозначение " e10 " не работает во всех культурах. Однако указание культуры en-US гарантирует, что она работает. Подозреваю!--6--> должен также сделать трюк.


@Noldorin правильно попробуйте этот код:

string str = "-5e20";
double d = double.Parse(str);
Console.WriteLine(str);

на математика.Раунд делает это хорошо, он будет reder номер, так что удалит, вот как его использовать:

Math.Round(Double.Parse("3,55E-15"),2)