Есть сервер приложений, одна из функций возвращает сумму в копейках в виде целого числа (int). Однажды выяснилось, что одна копейка "потерялась", в БД одна сумма, на клиенте она пришла на копейку меньше.
Сумму в результирующем классе устанавливает такой код:
double sum;
// ...
// Здесь расчет суммы
// ...
result.Sum = (Int32)(sum * 100);
Выяснилось, что при sum = 38.87 в result.Sum получается 3886!
Интересно, что если в Visual Studio в окне QuickWatch набрать 38.87*100, получается 3886.99999999995. Причем если умножать на 10 или 1000, то все ОК, получается соответственно 388.7 и 38870.0.
Что бы это значило? Теперь перевод в копейки через округление что ли делать?!