Преобразование из строки в double
От: Zanzak  
Дата: 27.03.06 14:10
Оценка:
Добрый день!

Натолкнулся на следующею проблему:
double d = atof("17.90");

Результатом работы d = 17.8999999999...
Представленная выше строка компилировалась в VC7 под XP.
Может кто подскажет как заставить d быть равным 17.90?
Re: Преобразование из строки в double
От: Nuzur  
Дата: 27.03.06 14:17
Оценка:
Здравствуйте, 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
Re: Преобразование из строки в double
От: rg45 СССР  
Дата: 27.03.06 14:18
Оценка: 1 (1) +1
"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
--
Справедливость выше закона. А человечность выше справедливости.
Re: Преобразование из строки в double
От: VoidEx  
Дата: 27.03.06 18:36
Оценка:
Здравствуйте, 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 и в десятиричной её никак не представишь конечной дробью, поэтому такие неточности имеют место.
Re: Преобразование из строки в double
От: Аноним  
Дата: 27.03.06 19:02
Оценка:
Здравствуйте, Zanzak, Вы писали:

Z>Добрый день!


Z>Натолкнулся на следующею проблему:

Z>double d = atof("17.90");

Z>Результатом работы d = 17.8999999999...

Z>Представленная выше строка компилировалась в VC7 под XP.
Z>Может кто подскажет как заставить d быть равным 17.90?

Добро пожаловать в мир погрешностей

P.S. Что-то давненько про виртуальные деструкторы не спрашивали
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.