Показать сообщение отдельно
Старый 01.08.2003, 10:17     # 2
aleh
Junior Member
 
Регистрация: 27.12.2002
Адрес: Belarus
Сообщения: 129

aleh Путь к славе только начался
Это нормально. Есть две причины:
1) При выводе float округляется, а при преобразовании в int происходит отсечение дробной части. Так 8.99995 при выводе только 4-х знаков после запятой напечатается как 9.0000, а при отсечении дробной части получится 8.
2) C/С++ работает с памятью без особой осторожности и при преобразовании в int просто берёт что содержится на месте float. Только при этом вместо 8 должна быть полная ересь (числа с плавающей запятой представляются весьма хитро).

Выход => Незнаю, но вроде должна быть процедура по преобразованию float в int, её нужно слегка дополнить, что-то типа float2int(float_number + 0.5) -- однозначного отображения вещественных чисел на целые нет, но хотябы погрешность будет не более 0.5 (хотя возможны артефакты, так как с точки зрения вещественных чисел 0.5 может и не быть, а есть 0.4999999999 или 0.500000001
aleh вне форума