Я заметил, что мои двойники содержат разные символы точности в зависимости от региональных настроек.
Например:
3,47
или 3.45
Как я могу принудительно использовать double, должен всегда содержать символ точности .
?
Проблема заключается в том, что я сериализую класс, содержащий этот двойник, в XML, он отправляется в другие системы, ожидающие стандартного результата.
Итак, прочитав ваши ответы (и спасибо), вы, ребята, рекомендуете изменить свойство на строку (делая замены в строке), чтобы она сериализовалась со строковым значением (а не двойным)?
Вам нужно поместить double в строку, используя Invariant Culture.
double d = 3.47;
Console.WriteLine(d.ToString(CultureInfo.InvariantCulture));
Вам нужно будет форматировать InvariantCulture.
Обратите внимание, что "." и "," символы форматирования интерпретируются в соответствии с настройками культуры.
Этот небольшой учебник будет ответом, который вам нужен, я ожидаю: http://www.java2s.com/Tutorial/CSharp/0440__I18N-Internationalization/Parsingnumberswithcultureinvariantparsing.htm
double.Parse(numberString, CultureInfo.InvariantCulture);
В самом двойнике не содержится "." или ",", только распечатка из представления. Вы можете читать пользовательские форматы здесь.
[Обновить согласно OP]
Я не знаю точно, как выглядит ваш дизайн, но, вероятно, было бы разумно создать свойство string на вашем DTO, которое выдаст форматированную строку вашего двойника, а затем пометьте ваше двойное свойство как не сериализуемое.
Если вам нужно сделать это для всех номеров в вашем текущем приложении, вы можете использовать следующее, чтобы установить его на уровне приложения (новые потоки наследуют этот параметр):
// use this statement to force the default:
Application.CurrentCulture = CultureInfo.InvariantCulture;
string s = myNumber.ToString();
// for one number you have to remember to use:
string s = myNumber.ToString(CultureInfo.InvariantCulture);
Примечание. По умолчанию ваше приложение, будь то ASP.NET или WinForms, будет использовать настройки культуры в системе, на которой он запущен (в ASP.NET вы можете установить культуру в глобальном масштабе в web.config
).
InvariantCulture
в тот момент, когда вы преобразуетесь в строку или задаетеApplication.CurrentCulture
чтобы он вообще не беспокоился.