kishore Rajendran Ответов: 2

Изменить десятичный разделитель в C#


я разрабатываю asp.net сайт приложения размещен на европейском сервере.

В европейском сервере десятичный разделитель является ","
у меня есть некоторые двойные значения в моем приложении, например 0.125
и какая-то строка для преобразования в double "0.125"
он отлично работает на локальном сервере,но показывает запятую вместо точки на живом сервере.

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

моя последняя попытка заключается в следующем

static System.Globalization.NumberFormatInfo numberformat = null;
System.Globalization.CultureInfo info = System.Globalization.CultureInfo.InstalledUICulture;
numberformat = (System.Globalization.NumberFormatInfo)
info.NumberFormat.Clone();
numberformat.NumberDecimalSeparator = ".";
double duration=double.Parse("0.125",numberformat);


это не работает.

Пожалуйста, помогите мне сделать это.

2 Ответов

Рейтинг:
12

Olivier Levrey

В дополнение к ответу SA, вы можете использовать InvariantCulture:

double a = 0.125;
//decimal separator will always be '.'
string txt = a.ToString(System.Globalization.CultureInfo.InvariantCulture);
//back to a double
double a2 = double.Parse(txt, System.Globalization.CultureInfo.InvariantCulture);


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


kishore Rajendran

Работать на меня
спасибо

Olivier Levrey

Добро пожаловать.
Тогда вы можете принять ответ или проголосовать за него.
Спасибо.

kishore Rajendran

влияют ли региональные настройки на sql server?
я сохраняю значение скажем 1,5 в ДБ
его экономия составляет 1,5
есть какие-нибудь идеи по этому поводу?


Пожалуйста, сообщите мне

Olivier Levrey

Мне очень жаль, что я ничего не знаю о sql server. Но если сохраненное значение равно 1,5 вместо 1,5, это означает, что он использует региональные настройки. Поэтому вам придется использовать ответ СА.
Может быть, вы можете настроить свой sql-сервер для работы с InvariantCulture?

kishore Rajendran

все в порядке НП

Рейтинг:
10

Sergey Alexandrovich Kryukov

Используйте поставщик форматов, реализованный по типу System.Globalization.CultureInfo.

Например:

System.IFormatProvider cultureUS =
   new System.Globalization.CultureInfo("en-US");

System.Globalization.CultureInfo cultureFr =
   new System.Globalization.CultureInfo("fr-fr");

//...

double duration = double.Parse("0.125", cultureUS);
double length = double.Parse("25,1415", cultureFr);


—СА


Abhinav S

Хороший ответ. Мой 5.

Sergey Alexandrovich Kryukov

Спасибо тебе, Абхинав,
--СА

Ankit Rajput

Хороший Ответ. Мой 5.

Sergey Alexandrovich Kryukov

Спасибо, Анкит.
--СА

kishore Rajendran

Не работает на меня

Sergey Alexandrovich Kryukov

Для программиста нет никакого "не работает". Время компиляции, исключения? Какой тип, сообщение? в каком направлении?...

Что именно не работает? Вы использовали ту культуру, которую хотели? (Мой - только для примера.) Вы проверили формат десятичного разделителя для культур? Исключения? Что?

--СА

kishore Rajendran

*

Sergey Alexandrovich Kryukov

Такая культура рассчитывает точку!
--СА

kishore Rajendran

*

Sergey Alexandrovich Kryukov

Я проверил его. Он работает, как и ожидалось; "fr-fr" ожидает запятую, "en-us" ожидает точку.

Могу я спросить, почему вы думаете, что это не работает?
Вы анализируете правильно, но когда вы вводите обратные номера обоих случаев, вы все равно видите их в том же формате. Но они должны быть в одном формате! Сами числа не имеют формата, они все двоичные. Когда вы их печатаете, они проявляются в современной культуре. Если они нужны вам как строки в другой культуре, используйте double.ToString в другой культуре.

Это твоя проблема?
--СА

Kim Togo

Хороший ответ, мой 5-й.

Sergey Alexandrovich Kryukov

- Спасибо, Ким.
Только что получил представление, почему ОП до сих пор не получил его, прокомментировал.
--СА

Olivier Levrey

Хороший ответ, есть 5. Но лично я предпочитаю использовать InvariantCulture так как вы можете легко хранить/загружать данные в/из стандартного формированного файла.

Sergey Alexandrovich Kryukov

Спасибо, Оливье.
Я согласен с вами, спасибо за эту записку.
Я только показываю, как использовать культуру.
--СА