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

#c# #list #decimal #scientific-notation

#c# #Список #десятичная #научная нотация

Вопрос:

У меня есть список строк (чисел с научной нотацией), и я хочу преобразовать его в действительные числа; моей идеей было преобразовать его с помощью цикла:

     for (var i = 0; i < time.Count; i  )
    {
        timeD.Add(decimal.Parse(time[i], System.Globalization.NumberStyles.Any));
    }
  

но значения выходных чисел неверны. Значения моего списка являются:

 7.6923076920E-10
1.5384615380E-09
3.2051282050E-09
4.8717948720E-09
  

и результат будет

 7,6923076920
15,384615380
32,051282050
48,717948720
  

Есть идеи, почему это происходит и как мне это исправить?

Комментарии:

1. О, я этого не заметил. Указание CultureInfo сработало, спасибо!

Ответ №1:

Похоже, что у вас есть CurrentCulture, где ‘.’ не является десятичным разделителем. Таким образом, 7.6923076920E-10 совпадает с 76923076920E-10. Попробуйте указать CultureInfo.Инвариантная культура при синтаксическом анализе:

  decimal.Parse(time[i], System.Globalization.NumberStyles.Any, CultureInfo.InvariantCulture)
  

Ответ №2:

Если вас не волнует глобализация, вы можете объявить свой собственный NumberFormatInfo

 var nfi = new NumberFormatInfo();
  

Итак, если ваш входной десятичный разделитель равен «.» или «,» вы можете установить его в

 nfi.NumberDecimalSeparator
  

Затем вы можете использовать

 var num = decimal.Parse(time[i], nfi);
  

CultureInfo.В InvariantCulture всегда предполагается, что десятичный разделитель равен «.»