CGFloat楼到NSInteger

Dav*_*ave 4 iphone xcode objective-c ios

在Xcode中,编译器抱怨以下转换:

CGFloat width = 5.6f; NSInteger num = (NSInteger)floor(width);

说" 从'double'类型的函数调用转换为非匹配类型'NSInteger'(又名'int') "

一个解决方法是简单地将CGFloat强制转换为NSInteger,它会截断,但我希望通过显式地板使代码清晰/易于阅读.是否有返回int的地板功能?或者其他一些(干净的)这样做的方式?

我的编译器设置在"Apple LLVM 6.0 - Compiler Flags"下,在"Other C Flags"中,我有-O0 -DOS_IOS -DDEBUG = 1 -Wall -Wextra -Werror -Wnewline-eof -Wconversion -Wendif-labels -Wshadow -Wbad -function-cast -Wenum-compare -Wno-unused-parameter -Wno-error = deprecated

谢谢!

Pal*_*lle 7

好的,正如你提到严格的编译器设置,我再次尝试并找到了解决方案.编译器警告是因为您尝试将floor函数转换为NSInteger值而不是返回值.

要解决这个问题,你所要做的就是将地板(宽度)放在括号中,如下所示:

NSInteger num = (NSInteger) (floor(width));
Run Code Online (Sandbox Code Playgroud)

或者将floor操作的结果保存到另一个CGFloat并将新变量强制转换为NSInteger

CGFloat floored = floor(width);
NSInteger num = (NSInteger) floored;
Run Code Online (Sandbox Code Playgroud)