I often need to floor or ceil a CGFloat
to an int
, for calculation of an array index.
The problem I permanently see with floorf(theCGFloat)
or ceilf(theCGFloat)
is that there can be troubles with floating point inaccuracies.
So what if my CGFloat
is 2.0f
but internally it is represented as 1.999999999999f
or something like that. I do floorf
and get 1.0f
, which is a float again. And yet I must cast this beast to int which may introduce another problem.
Is there a best practice how to floor or ceil a float
to an int
such that something like 2.0
would never accidentally get floored to 1
and something like 2.0
would never accidentally get ceiled to 2
?