Каждое приведение к int - это округление, поэтому каждый раз, когда вы делаете это, останавливайтесь на секунду и думайте: какого округления мне нужно на этот раз ? Сбрасывает дробную часть? этаж()? CEIL ()? Или округление положительного числа в сторону ближайшего int? Если 5.999999999999
должно быть 6
, используйте (int)(t+.5)
, а не (int)t
.
Или вы можете имитировать поведение c printf
и округлять только наименьшую дробь float
, которая может варьируются (в зависимости от наибольшего значения, которое вы используете). (int)(t+.000001)
округляет и 1.9
до 1 (как это, вероятно, следует), и от 3.9999999999 до 4 (поскольку равно 4 с некоторыми незначительными ошибками представления чисел).
Однако следует знать размер дроби, которая может быть реальной, значимой частью ваших данных. Все, что меньше этой дроби, должно быть округлено. Это может быть .00000001
или .5
, в зависимости от ваших потребностей и самого алгоритма.