разный результат вычисления на компе и на серве

Sanekk

Client
Регистрация
24.06.2016
Сообщения
988
Благодарностей
388
Баллы
63
Привет

C#:
string base_price = "23,87";
string sale_price = "17,58";

//вычисляем размер скидки
double economy_price = double.Parse(base_price) - double.Parse(sale_price);
    
project.SendWarningToLog(economy_price.ToString(),true);
результатом выполнения должно быть 6,29
вот результат в PM
42411
все норм
вот результат выполнения в зенобоксе
42412
куда пропала запятая?
PM и зенка стоит на вин7 версия 5.11.5.0
зенобокс стоит на вин сервер 2012 версия 5.11.5.0
кто нибуть сталкивался с таким... ?
 

Yuriy Zymlex

Moderator
Команда форума
Регистрация
24.10.2016
Сообщения
6 369
Благодарностей
3 293
Баллы
113
Дело в разной локали (языках).
 
  • Спасибо
Реакции: Sergodjan и Sanekk

backoff

Client
Регистрация
20.04.2015
Сообщения
5 925
Благодарностей
6 389
Баллы
113

Sanekk

Client
Регистрация
24.06.2016
Сообщения
988
Благодарностей
388
Баллы
63

Hartwell

Client
Регистрация
25.09.2014
Сообщения
194
Благодарностей
117
Баллы
43
Работая с финансами тип double в вашем примере (да и тот же float аналогично) не лучший вариант. Почему?

float
0.2 + 0.1 != 0.3

взято с js
JavaScript:
0.1 + 0.2 // returns 0.30000000000000004
может показаться что разум сошел с ума, но это так, объясняется довольно просто (гуглите). В частности в c# в документации приводится рекомендация для финансовых подсчетов использовать стоит decemical тип, так как он позволяет выполнять более точный результат.


з.ы. можно явно указать глобализацию либо привести к другому разделителю
C#:
IFormatProvider formatter = new NumberFormatInfo{NumberDecimalSeparator = "."};
 
  • Спасибо
Реакции: Yuriy Zymlex

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