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