54

完全是新手问题,但这让我发疯!我正在尝试这个:

myInt = [myFloat integerValue]; 

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

我该怎么做?

4

6 回答 6

129

我很确定 C 风格的强制转换语法在 Objective C 中有效,所以也试试吧:

int myInt = (int) myFloat;

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

于 2008-11-13T10:38:43.737 回答
12

有什么问题:

int myInt = myFloat;

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

于 2008-11-13T10:32:52.673 回答
8
int myInt = (int) myFloat;

对我来说工作得很好。

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

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

于 2011-08-06T23:31:23.717 回答
7

您也可以使用 C 的lroundf(myFloat).


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

myInt = roundf(someFloat);

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

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

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

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

于 2013-09-29T01:10:20.217 回答
2

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

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

于 2008-11-13T21:48:19.810 回答
1

这是 2012 年引入的更简洁的方法:

myInt = @(myFloat).intValue;
于 2015-07-19T23:49:16.260 回答