Re: visual c++ неправельно умножает
От: babur Россия  
Дата: 27.08.04 08:37
Оценка: 1 (1)
А> double d_v=133.20;
А> double d_y=10;
А> long l_v=(long)(d_v*100);
А>- получается 13319
Дело в том, что вещественное число 133.2 не имеет конечного двоичного представления. Для машины это бесконечная дробь, часть знаков которой хранится, а отброшенные и составляют ту самую погрешность. После умножения на 10, число не становится целым, а по прежнему имеет хвост из девяток (в десятичном представлении). Преобразование (long) просто отбрасывает дробную часть Вашего числа и оставляет целую, а она равна 13319, за которой следует .9999999

Вам следует использовать функции округления при преобразовании вещественных чисел к целым типам, а не просто преобразование типов.

Успехов,
Данил
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.