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

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

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

Решение:

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

Ответ 1

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

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

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

Ответ 2

Стандартная 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", например, не работает во всех культурах. Однако указание культуры в США гарантирует, что она работает. Я подозреваю, что CultureInfo.InvariantCulture тоже должен сделать трюк.

Ответ 3

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

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

Ответ 4

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

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