如何从CGFloat安全地创建NSInteger?

时间:2009-09-02 23:53:17

标签: iphone cocoa-touch uikit

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

NSInteger niceInt = niceCGFloat;

看起来太简单了,闻起来有点儿麻烦。也许你可以解释一下?

2 个答案:

答案 0 :(得分:7)

你想要一个将浮点数舍入为long int的c函数lrintf()

答案 1 :(得分:6)

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

为了避免这种情况,我会将0.5f添加到您的浮点值。这也会使你的浮点数变圆,而不是截断它。

NSInteger niceInt = niceCGFloat + 0.5f;