Настройки области C # перепутаны - PullRequest
1 голос
/ 10 января 2012

Все дело в двойных числах, числах с плавающей запятой и разделителях.Итак, моя проблема: я всегда получаю двойное значение с разделителем точек.Если я преобразую его в строку, я получу запятую.Если я верну двойное значение, оно снова станет точечным.Добавьте сюда немного кода:

    data = Convert.ToDouble(read.ReadSingle()); // converts to -70.00
    Conv = Convert.ToString(data); // converts to -70,00 string
    laikinas[k, m] = double.Parse(Conv);  // and in array I'll get 70.00. 

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

Кстати, я изменил настройки региона, пока был наполовину оторван от проекта.

1 Ответ

10 голосов
/ 10 января 2012

A double не имеет ни точки, ни запятой ;он хранится в каком-то внутреннем представлении.Когда вы смотрите на него , например, через отладчик Visual Studio, вы видите некоторое его строковое представление (то, которое Visual Studio выбирает для использования).Это строковое представление не имеет значения, оно показывается только для целей отладки.

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

  • Convert.ToString (Double) эквивалентно Double.ToString () , который использует десятичный разделитель на основе вашей текущей культуры -- следовательно, вы получаете запятую (в вашей системе) при использовании Convert.ToString.

  • Если вы используете другой метод для преобразования, например, Double.ToString (IFormatProvider), вы можете указать настройки культуры, которые вы хотите использовать в качестве параметра.Например, myDouble.ToString(CultureInfo.InvariantCulture) будет всегда использовать точку в качестве десятичного разделителя, независимо от настроек языка пользователя.

...