如何在Objective C中将float转换为int?

时间:2008-11-13 10:29:50

标签: objective-c casting floating-point

总新手问题,但这让我很生气! 我正在尝试这个:

myInt = [myFloat integerValue]; 

但我得到一个错误,说基本上integerValue不适用于浮点数。

我该怎么做?

6 个答案:

答案 0 :(得分:124)

我很确定C风格的转换语法在Objective C中有效,所以也尝试一下:

int myInt = (int) myFloat;

至少可能会使编译器警告静音。

答案 1 :(得分:11)

出了什么问题:

int myInt = myFloat;

请记住,这将使用默认的舍入规则,即向零(即-3.9f变为-3)

答案 2 :(得分:8)

int myInt = (int) myFloat;

对我来说很好。

int myInt = [[NSNumber numberWithFloat:myFloat] intValue];

嗯,这是一个选择。如果你喜欢绕行,我可以想到一些使用NSString。 当有复杂的替代方案时,为什么容易? :)

答案 3 :(得分:6)

您也可以使用C lroundf(myFloat)


一个非常有用的提示:在Xcode的编辑器中,输入代码为

myInt = roundf(someFloat);

然后控制/右键单击roundf跳转到定义(或只是按住命令单击)。

然后,您将清楚地看到非常长的可用功能列表。 (所有人都不可能记住它们,所以只需使用这个技巧。)

例如,在手边的示例中,lrintf可能就是您想要的。

进一步提示:获取有关这些功能的文档。在您的Terminal.app(或任何shell - 与Xcode无关,只是正常的Terminal.app )只需键入man lrintf,它将为您提供完整信息。希望它可以帮到某人。

答案 4 :(得分:2)

为了支持放松,请记住Objective-C是C的超集,而不是一种全新的语言。

您可以在常规旧ANSI C中执行的任何操作都可以在Objective-C中完成。

答案 5 :(得分:0)

这是2012年推出的更简洁的方法:

myInt = @(myFloat).intValue;