How to safely floor or ceil a CGFloat to int?

前端 未结 3 1336
面向向阳花
面向向阳花 2021-02-01 19:01

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(theCGFloa

3条回答
  •  无人及你
    2021-02-01 19:43

    There are a couple misconceptions in your question.

    what if my CGFloat is 2.0f but internally it is represented as 1.999999999999f

    can't happen; 2.0, like all reasonably small integers, has an exact representation in floating-point. If your CGFloat is 2.0f, then it really is 2.0.

    something like 2.0 would never accidentally get ceiled to 2

    The ceiling of 2.0 is 2; what else would it possibly be?


    I think the question that you're really asking is "suppose I do a calculation that produces an inexact result, which mathematically should be exactly 2.0, but is actually slightly less; when I apply floor to that value, I get 1.0 instead of 2.0--how do I prevent this?"

    That's actually a fairly subtle question that doesn't have a single "right" answer. How have you computed the input value? What are you going to do with the result?

提交回复
热议问题