2008-11-13 93 views
47

总新手问题,但这让我生气! 我想这一点:如何将浮点数转换为Objective C中的int值?

myInt = [myFloat integerValue]; 

,但我得到一个错误说基本上integerValue不能在彩车工作。

我该怎么做?

+3

彩车是原始类型,它们不是Objective-C的对象,因此不能使用[myFloat integerValue]就可以了。如果它不扩展NSObject,则不能将消息传递给它。 – seanalltogether 2008-11-14 04:39:36

+0

过度使用方法是:[[NSNumber numberWithFloat:myFloat] integerValue](但你应该使用cast,真的) – Kornel 2009-07-06 14:00:43

+1

@porneL 2013年,你可以'[@(myFloat)integerValue]' – 2013-04-07 01:16:20

回答

120

我敢肯定Ç风格的铸造语法可以在Objective C中使用,所以请尝试:

int myInt = (int) myFloat; 

至少可以使编译器警告无声。

11

有什么错:记住

int myInt = myFloat; 

熊本将使用默认的四舍五入规则,这是接近零(即-3.9f变成-3)

2

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

您可以在常规的旧ANSI C中做的任何事情都可以在Objective-C中完成。

7
int myInt = (int) myFloat; 

对我来说工作很好。

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

那么,这是一种选择。如果你喜欢绕道,我可以考虑使用NSString。 为什么容易,当有一个复杂的选择? :)

4

您还可以使用C的lroundf(myFloat)


一个非常有用的技巧:在Xcode的编辑器,输入你的代码说

myInt = roundf(someFloat); 

然后控制/上roundf跳转到右键单击(或简单地命令点击)。

然后您将清楚地看到很长的可用功能列表给您。 (不可能全部记住它们,所以只需使用这个技巧。)

例如,在手头的示例中,您可能需要lrintf

更多提示:获取有关这些许多功能的文档。在您的Terminal.app(或任何外壳 - 与Xcode无关,只是正常的Terminal.app)只需键入man lrintf,它会给你完整的信息。希望它能帮助别人。

0

下面是在2012推出了更简洁的方法:

myInt = @(myFloat).intValue;