整数除法后浮点数为0

时间:2012-08-15 12:28:28

标签: objective-c ios cgfloat

这可能是一个简单的解决方案,但我无法修复它。

我正在划分2个整数:

finishedGameFinalScore = [score integerValue];
CGFloat interval = 2/finishedGameFinalScore;
NSLog(@"interval = %f",interval);

日志返回0.000000

小数位有限制吗?我需要保留小数结果。

由于 沙尼

4 个答案:

答案 0 :(得分:73)

您的代码不起作用的原因是您将整数除以另一个整数,然后将结果转换为浮点数。

所以你有2(一个整数)和一些其他数字(也是一个整数)。然后你用这个数除2 - 这可能大于2.假设它是3。

Integer看到2/3,他就像“0.66666667?Pshh,无论如何都没有人需要小数点后的任何东西”。所以他截断了它。你只有0。

然后Integerfloat先生提供了号码,而float先生非常乐意获得一个号码!他都喜欢“yay,0!我将添加所有重要的数字”。这就是你最终获得0.0000000的方式。

所以是的,先投入浮标。甚至是双倍!

enter image description here

答案 1 :(得分:12)

@ Dustin 表示你需要强制分类你的分频器值才能浮动,因为它在浮点数中显示整数值

案例1:Typecast

NSString *score = @"3";
 int interval = [str intValue];
 CGFloat interval = (2/(float)interval);
 NSLog(@"interval = %.2f",interval);

案例2:无需进行类型转换

NSString *score = @"3";
 float interval = [str floatValue];
 CGFloat interval = (2/interval);
 NSLog(@"interval = %.2f",interval);

答案 2 :(得分:8)

只需将f-hint添加到数字2中。在这种情况下,这将起到作用。

CGFloat interval = 2.0f/finishedGameFinalScore;

所有上述/下面的答案都是正确的,并完全解释了为什么这项工作。

答案 3 :(得分:1)

从1.0中分配长值并分配给浮点变量。

unsigned long l1 = 65536;
unsigned long l2 = 256;
float f = (l1/1.0)/(l2/1.0);

NSLog(@"%f",f);