Warning: file_get_contents(/data/phpspider/zhask/data//catemap/0/iphone/37.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Iphone 如何从CGFloat安全地创建NSInteger?_Iphone_Cocoa Touch_Uikit - Fatal编程技术网

Iphone 如何从CGFloat安全地创建NSInteger?

Iphone 如何从CGFloat安全地创建NSInteger?,iphone,cocoa-touch,uikit,Iphone,Cocoa Touch,Uikit,我有一个CGFloat,但作为一个NSInteger需要它。浮点值类似于2.0f,所以我不介意分数部分和失去精度。有什么合法的方法可以毫无困难地将其转换为NSInteger(当然,除了精度损失) 看起来太简单了,闻起来像马车。也许你可以解释一下?当用二进制表示时,2.0f实际上可能是1.9999999f。转换为int将导致1而不是2 为了避免这种情况,我会给你的浮点值加上0.5f。这也会产生舍入浮点值的效果,而不是截断浮点值 NSInteger niceInt=niceCGFloat+0.5f您

我有一个CGFloat,但作为一个NSInteger需要它。浮点值类似于2.0f,所以我不介意分数部分和失去精度。有什么合法的方法可以毫无困难地将其转换为NSInteger(当然,除了精度损失)


看起来太简单了,闻起来像马车。也许你可以解释一下?

当用二进制表示时,2.0f实际上可能是1.9999999f。转换为int将导致1而不是2

为了避免这种情况,我会给你的浮点值加上0.5f。这也会产生舍入浮点值的效果,而不是截断浮点值

NSInteger niceInt=niceCGFloat+0.5f

您需要将浮点舍入为长整数的c函数

NSInteger niceInt = niceCGFloat;