#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 всегда предполагается, что десятичный разделитель равен «.»