Objective-C Float Rounding

Cod*_*Guy 40 iphone floating-point objective-c rounding ios

我怎样才能将浮点数舍入到Objective-C中最接近的整数:

例:

float f = 45.698f;
int rounded = _______;
NSLog(@"the rounded float is %i",rounded);
Run Code Online (Sandbox Code Playgroud)

应打印"圆形浮子是46"

Jon*_*pan 148

使用C标准功能系列round().roundf()for float,round()for doubleroundl()for long double.然后,您可以将结果转换为您选择的整数类型.

  • 我认为这是更好,更有效的方法. (2认同)
  • 与+ 0.5方法不同,这确实可以正确处理负数. (2认同)

Dav*_*ave 27

建议的方法是在这个答案:https://stackoverflow.com/a/4702539/308315


原始答案:

添加0.5后将其强制转换为int.

所以

NSLog (@"the rounded float is %i", (int) (f + 0.5));
Run Code Online (Sandbox Code Playgroud)

编辑:您要求的方式:

int rounded = (f + 0.5);


NSLog (@"the rounded float is %i", rounded);
Run Code Online (Sandbox Code Playgroud)

  • 这不能正确处理负数. (13认同)
  • 实际上没有.这将产生最近的舍入. (12认同)
  • 这只会产生_downward_舍入.得到<.5舍入和> = .5向上舍入:[NSString stringWithFormat:@"%i",(int)round(f)] (7认同)
  • 示例:-2.8舍入应为-3,但使用您的公式我们有-2.8 + 0.5 = -2.2,转换为int是-2 (2认同)

vp2*_*698 6

用于舍入float到最接近的整数roundf()

roundf(3.2) // 3
roundf(3.6) // 4
Run Code Online (Sandbox Code Playgroud)

您还可以使用ceil()函数来始终获取上限值float.

ceil(3.2) // 4
ceil(3.6) // 4
Run Code Online (Sandbox Code Playgroud)

而且价值最低 floor()

floorf(3.2) //3
floorf(3.6) //3
Run Code Online (Sandbox Code Playgroud)


cap*_*kaw 5

在objective-c中舍入浮点数的最简单方法是lroundf:

float yourFloat = 3.14;
int roundedFloat = lroundf(yourFloat); 
NSLog(@"%d",roundedFloat);
Run Code Online (Sandbox Code Playgroud)

  • @Hot Licks - 除非您需要舍入正数和负数(我的情况),其中0.5方法存在缺陷. (4认同)