Чудеса с плавающей точкой
От: Stone78 Россия  
Дата: 20.10.08 09:07
Оценка: :)))
Есть сервер приложений, одна из функций возвращает сумму в копейках в виде целого числа (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.

Что бы это значило? Теперь перевод в копейки через округление что ли делать?!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.