Снипет по разному работает на разных компах.

jonvy

Client
Регистрация
28.11.2015
Сообщения
305
Благодарностей
17
Баллы
18
Например:

decimal a = decimal.Parse(project.Variables["a"].Value);
return a*100;

В переменной а находится число с запятой например 0,2273577

Если выполнять этот код на моём компе то в числе должна быть запятая. Т.е. если там будет точка 0.2273577 то снипет не сработает будет ошибка.

Если на сервере, то в переменной а должна быть точка 0.2273577
Если в числе будет запятая, то при умножении на 100 в конец числа будет дописано 00.
Получится 0,2273577*100=227357700

Как сделать чтобы на всех компах оно работало одинаково?
 

DmitryAk

Client
Регистрация
14.12.2016
Сообщения
860
Благодарностей
824
Баллы
93
Привести региональные настройки на компах в единый вид, либо учесть в сниппете этот момент и заменять зпт и тчк на текущий разделитель полученный из Culture. Пример решения второго варианта ниже:
C#:
string data = "0,05"; //project.Variable['Double_data'].Value;
Char separator = System.Globalization.CultureInfo.CurrentCulture.NumberFormat.CurrencyDecimalSeparator[0];
data = data.Replace( ',' , separator);
data = data.Replace( '.' , separator);
return data;
 
  • Спасибо
Реакции: doc и evgen_po

jonvy

Client
Регистрация
28.11.2015
Сообщения
305
Благодарностей
17
Баллы
18
Привести региональные настройки на компах в единый вид, либо учесть в сниппете этот момент и заменять зпт и тчк на текущий разделитель полученный из Culture. Пример решения второго варианта ниже:
C#:
string data = "0,05"; //project.Variable['Double_data'].Value;
Char separator = System.Globalization.CultureInfo.CurrentCulture.NumberFormat.CurrencyDecimalSeparator[0];
data = data.Replace( ',' , separator);
data = data.Replace( '.' , separator);
return data;
Я вот так решил

System.Threading.Thread.CurrentThread.CurrentCulture = new System.Globalization.CultureInfo("en-US");
//Теперь у меня на обоих компах работают точки. Этого достаточно или мне ждать какие то сюрпризы при использовании такого решения ?
decimal a = decimal.Parse(project.Variables["High"].Value);
decimal b = decimal.Parse(project.Variables["Low"].Value);
//разница в процентах между мин. и макс. ценой
return ((a*100)/b)-100;
 

Кто просматривает тему: (Всего: 1, Пользователи: 0, Гости: 1)