我有一个CGFloat但需要它作为NSInteger。浮点值类似于2.0f,所以我不介意小数部分和失去精度。将问题转换为NSInteger的合法方法是什么(当然除了精度的损失除外)?
NSInteger niceInt = niceCGFloat;
看起来太简单了,闻起来有点儿麻烦。也许你可以解释一下?
答案 0 :(得分:7)
你想要一个将浮点数舍入为long int的c函数lrintf()。
答案 1 :(得分:6)
当以二进制表示时,2.0f实际上可能实际上是1.9999999999f的风险。然后转换为int将导致1而不是2。
为了避免这种情况,我会将0.5f添加到您的浮点值。这也会使你的浮点数变圆,而不是截断它。
NSInteger niceInt = niceCGFloat + 0.5f;