Строковая позиция с "," чтобы удвоить с "." - PullRequest
0 голосов
/ 17 сентября 2018

Я пытаюсь преобразовать позицию из строки в двойную, чтобы использовать ее на карте. Позиция строки в формате как:

latString: "31,92002306867021"

Использование:

double lat = Convert.ToDouble(latString, CultureInfo.InvariantCulture);

результат неправильный: 3,19200230686702E + 15

Используя Convert.ToDouble(latString), дайте мне номер без "."

Как правильно управлять этим типом конвертации?

Ответы [ 2 ]

0 голосов
/ 17 сентября 2018

Кажется, что у вас есть latString в какой-то другой культуре, которая использует , в качестве тысячного разделителя , который просто игнорируется при преобразовании в плавающую точку:

  "31,92002306867021" -> 3192002306867021 -> 3.19200230686702E+15

Сначала проверьте текущую культуру , может показаться, что он использует , в качестве десятичного разделителя :

  string latString = "31,92002306867021";

  // Current culture
  double result = Convert.ToDouble(latString);

Если нет, вы можете попробовать заменить , текущим десятичным разделителем:

  string latString = "31,92002306867021";

  // be careful and culture specific: naive
  //   latString.Replace(",", ".")
  // will cause problems with some cultures 
  // (e.g. ru-Ru which uses "." as a thousand separator) 
  string value = latString.Replace(",", 
    CultureInfo.CurrentCulture.NumberFormat.NumberDecimalSeparator);

  double result = Convert.ToDouble(value);
0 голосов
/ 17 сентября 2018

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

Если вы перейдете в культуру, в которой используются запятые (например, nl-NL), она будет работать:

double lat = Convert.ToDouble("31,1234", CultureInfo.CreateSpecificCulture("nl-NL"));

Если вы абсолютно уверены, что входные строки могут содержать только допустимые значения широты / долготы (т. Е. Числа никогда не будут превышать 1000), то вы также можете использовать замену строки:

double lat = Convert.ToDouble("31,1234".Replace(',', '.'), CultureInfo.InvariantCulture);
...