Добрый день!
Натолкнулся на следующею проблему:
double d = atof("17.90");
Результатом работы d = 17.8999999999...
Представленная выше строка

компилировалась в VC7 под XP.
Может кто подскажет как заставить d быть равным 17.90?
Здравствуйте, Zanzak, Вы писали:
Z>Добрый день!
Z>Натолкнулся на следующею проблему:
Z>double d = atof("17.90");
Z>Результатом работы d = 17.8999999999...
Z>Представленная выше строка
компилировалась в VC7 под XP.
Z>Может кто подскажет как заставить d быть равным 17.90?
Только округлением до нужного десятичного знака, суть в том, что double и float сами по себе допускают такую ошибку и тут ничего не сделаеш, возможность такого огреха ето плата за колосальность значений которые может хранить данный тип.
Sad but true
"Zanzak" <52744@users.rsdn.ru> wrote in message
news:1806415@news.rsdn.ru...
> Добрый день!
>
> Натолкнулся на следующею проблему:
> double d = atof("17.90");
>
> Результатом работы d = 17.8999999999...
> Представленная выше строка
компилировалась в VC7 под XP.
> Может кто подскажет как заставить d быть равным 17.90?
Никак. Переменная типа double не может быть равной 17.90.
Эта тема уже много раз обсуждалась и периодически возникает.
Как из этой ситуации выходить, зависит от конкретной задачи. Если 17.90 — это 17 рублей 90 копеек, то имеет смысл перейти к целочисленной арифметике и обозначать эту величину как 1790 копеек.
Posted via RSDN NNTP Server 2.0
Здравствуйте, Zanzak, Вы писали:
Z>Добрый день!
Z>Натолкнулся на следующею проблему:
Z>double d = atof("17.90");
Z>Результатом работы d = 17.8999999999...
Z>Представленная выше строка
компилировалась в VC7 под XP.
Z>Может кто подскажет как заставить d быть равным 17.90?
Проблема в том, что внутри double хранится в двоичной системе, а на экран выводится в 10-ричной.
Например, в трочиной 0.1 — это 1/3 и в десятиричной её никак не представишь конечной дробью, поэтому такие неточности имеют место.
Здравствуйте, Zanzak, Вы писали:
Z>Добрый день!
Z>Натолкнулся на следующею проблему:
Z>double d = atof("17.90");
Z>Результатом работы d = 17.8999999999...
Z>Представленная выше строка
компилировалась в VC7 под XP.
Z>Может кто подскажет как заставить d быть равным 17.90?
Добро пожаловать в мир погрешностей
P.S. Что-то давненько про виртуальные деструкторы не спрашивали