Настройки региона С# перепутаны

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

    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 такой, какой она должна быть.

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


person Dovydas    schedule 10.01.2012    source источник
comment
Извините, не упомянул его C # 2010 Express   -  person Dovydas    schedule 10.01.2012
comment
Я получил ответ, который, как мне кажется, хорош. Просто из ответа я получил еще один вопрос, который, возможно, должен перейти в другой пост, так как он немного отличается.   -  person Dovydas    schedule 10.01.2012
comment
Да, последующие вопросы должны быть новыми сообщениями.   -  person Kyle Trauberman    schedule 10.01.2012


Ответы (1)


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

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

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

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

person Heinzi    schedule 10.01.2012
comment
Ок, спасибо не знал. Но как насчет MS.Graphs, возможно, это та же проблема. Потому что самая большая проблема в том, что я отправил эти числа в MS.Chart. и получить точки тоже. Так что он может сам выбирать, как представлять число, а также показывать точку. Может быть, есть какая-то работа, чтобы получить запятые? Спасибо. Я чувствую себя лучше, зная, что мой код не испорчен :) - person Dovydas; 10.01.2012
comment
@Dovydas: Это может быть проблема, связанная с тем, что MS.Graphs не учитывает настройки вашей культуры при преобразовании ваших двойников в строки. Я предлагаю начать новый вопрос об этом, где вы (а) упоминаете, что Convert.ToString правильно показывает запятую (чтобы доказать, что ваши региональные настройки верны) и (б) приводите краткий пример кода, который демонстрирует, как вы используете MS.Charts и что может быть использовано для воспроизведения проблемы. - person Heinzi; 10.01.2012