如何从CGFloat安全地创建NSInteger?

4 iphone cocoa-touch uikit

我有一个CGFloat但需要它作为NSInteger.浮点值类似于2.0f,所以我不介意小数部分和失去精度.将其转换为NSInteger没有问题的合法方法是什么(当然,除了精度损失之外)?

NSInteger niceInt = niceCGFloat;
Run Code Online (Sandbox Code Playgroud)

看起来太简单了,闻起来很麻烦.也许你可以解释一下?

gro*_*hog 7

你想要c函数lrintf(),它将浮点数入为long int.


Mar*_*ote 6

当以二进制表示时,2.0f实际上总是存在1.9999999999f的风险.然后转换为int将导致1而不是2.

为了避免这种情况,我会在浮点值上加0.5f.这也会使你的浮点数变圆,而不是截断浮点数.

NSInteger niceInt = niceCGFloat + 0.5f;