Преобразование чисел с показательной записью из строки в двойную или десятичную
Есть ли быстрый способ конвертировать числа с показательной записью (примеры: "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)