2012-08-15 116 views
14

这可能是一个简单的解决方案,但我无法修复它。整数除法后浮点数为0

我除以2点的整数:

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

日志返回0.000000

是否有小数的限制吗?我需要保留十进制结果。

感谢 沙尼

+1

'CGFloat的finishedGameFinalScore = [得分的floatValue];''CGFloat的间隔= 2.0F/finishedGameFinalScore;' – janusbalatbat 2012-08-15 12:30:10

+1

你必须通过一个浮动指针数目来划分以获得一个浮点数。 – Joe 2012-08-15 12:31:16

+1

对于每种基于C的语言都是如此。将两个整数相除会得到一个整数。 – borrrden 2012-08-15 12:32:18

回答

71

您的代码不工作的原因是,你将一个整数被另一个整数,然后铸造结果为float。

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

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

然后Integer给数字先生float和先生float是超级开心得到一个数字!他就像“好吧,0!我要添加所有重要的数字”。这就是你最终得到0.0000000的结果。

所以是的,只是先投到一个浮动。甚至是双倍!

enter image description here

+0

即使只是'CGFloat interval = 2.0/finishedGameFinalScore;'(add '.0')。作为'2。0'是'CGFloat',结果将是一个'CGFloat'保存所有的小数。 – 2016-02-16 15:07:21

12

@达斯汀说ü将需要类型转换分频器值浮动,因为它去浮法它显示整数值

案例1:强制转换

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

CASE 2:无需类型转换

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

正是在这种情况下,会做的伎俩的F-提示添加到数字2。

CGFloat interval = 2.0f/finishedGameFinalScore; 

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

+0

通常情况下,如果已经有两个答案,除非添加重要的重要数据,否则不会将其添加为新答案。如果你认为它真的增加了一些东西,你可以在问题或其他答案上发表评论。但我会为它+1,因为你是新的。 – Dustin 2012-08-15 16:40:47

0

只是从1.0开始分配长值并分配给浮点型变量。

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

NSLog(@"%f",f);