c # Входная строка была в неправильном формате.Convert.ToDouble (переменная) - PullRequest
0 голосов
/ 19 сентября 2019

CSV-файл: https://prnt.sc/p86gm9 фактический код: https://prnt.sc/p86gxm

Я пытался поставить .ToString (), он не работал.Любые идеи, почему я получаю эту ошибку?

Ответы [ 3 ]

0 голосов
/ 19 сентября 2019

Вы можете использовать CultureInfo.CurrentUICulture.NumberFormat.NumberDecimalSeparator, как показано ниже:

  string separatorDecimal = CultureInfo.CurrentUICulture.NumberFormat.NumberDecimalSeparator;
  string str1 = "2.5";
  string str2 = "2,5";
  str1 = str1.Replace(".", separatorDecimal).Replace(",", separatorDecimal);
  str2 = str2.Replace(".", separatorDecimal).Replace(",", separatorDecimal);
  var v1 = double.Parse(str1);
  var v2 = double.Parse(str2);
  Console.WriteLine(v1.ToString());
  Console.WriteLine(v2.ToString());
  Console.ReadKey();

На французском Windows показано:

2,5
2,5

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

Например:

str = str.Replace(" ", "");
if ( str.Count(c => c == ',' || c == '.') != 1 )
  throw new ArgumentException();
0 голосов
/ 19 сентября 2019

Как-то в ваших данных есть пустое значение, которое не анализируется должным образом, поэтому вам нужно сначала проверить эти значения перед синтаксическим анализом.

public static void Main()
        {
            string[] parts = { "6.50", "950" };
            double? weight = parts[0] != null && parts[0].Length > 0 ? double.Parse(parts[0]) : (double?)null;
            int? price = parts[1] != null && parts[1].Length > 0 ? int.Parse(parts[1]) : (int?)null;
        }

enter image description here

0 голосов
/ 19 сентября 2019

Возможно, вы пытаетесь разобраться с неправильной культурой.Например, на немецком языке вы пишете 3,5 вместо 3.5.

double.Parse(valueString, CultureInfo.InvariantCulture)

может помочь.Возможно, у вас также есть начальные или конечные пробелы в строке, поэтому вы также можете попробовать valueString.Trim() при передаче его в метод double.Parse.

Если вы хотите проанализировать valueString с другой информацией о культуре, вы можетеукажите это тоже:

double.Parse("2,5", CultureInfo.GetCultureInfoByIetfLanguageTag("fr-FR"))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...