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

Nic*_*ing 51 floating-point casting objective-c

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

myInt = [myFloat integerValue]; 
Run Code Online (Sandbox Code Playgroud)

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

我该怎么做?

unw*_*ind 125

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

int myInt = (int) myFloat;
Run Code Online (Sandbox Code Playgroud)

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

  • @GabrielMolter看看`roundf` - 它将舍入到最接近的整数:) (4认同)

Aln*_*tak 12

有什么不对:

int myInt = myFloat;
Run Code Online (Sandbox Code Playgroud)

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


Her*_*ker 8

int myInt = (int) myFloat;
Run Code Online (Sandbox Code Playgroud)

为我工作得很好.

int myInt = [[NSNumber numberWithFloat:myFloat] intValue];
Run Code Online (Sandbox Code Playgroud)

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


jmc*_*nes 6

你也可以用C的lroundf(myFloat).


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

myInt = roundf(someFloat);
Run Code Online (Sandbox Code Playgroud)

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

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

例如,在手头的例子中,很可能lrintf就是你想要的.

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