14

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

我正在划分 2 个整数:

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

日志返回0.000000

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

谢谢沙妮

4

4 回答 4

74

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

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

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

然后Integer把号码给先生float,先生float拿到号码超级开心!他就像“是的,0!我要添加所有重要数字”。这就是你最终得到 0.0000000 的方式。

所以,是的,只需先转换为浮点数。甚至是双倍!

在此处输入图像描述

于 2012-08-15T12:38:35.580 回答
13

@Dustin你需要将你的分频器值转换为浮点数因为它会显示整数值

案例 1:类型转换

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);
于 2012-08-15T13:03:39.550 回答
8

只需将 f 提示添加到数字 2。在这种情况下,就可以了。

CGFloat interval = 2.0f/finishedGameFinalScore;

以上/以下所有答案都是正确的,并充分解释了这项工作的原因。

于 2012-08-15T15:00:50.957 回答
1

只需将 long 值从 1.0 分配给 float 变量。

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

NSLog(@"%f",f);
于 2015-11-27T07:08:19.373 回答