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

  • Автор темы Автор темы Sanekk
  • Дата начала Дата начала

Sanekk

Client
Регистрация
24.06.2016
Сообщения
1 002
Реакции
389
Баллы
83
Привет

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
кто нибуть сталкивался с таким... ?
 
Работая с финансами тип 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 = "."};
 
  • Оценить
Реакции: ZX

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