2

我有两个名为“domande”和“corrette”的 NSInteger 变量。我必须和他们一起执行这个操作:corrette*10/domande。我希望结果是一个浮点变量,所以我声明了一个“voto”变量:“float voto = corrette*10/domande;” . 当我用 NSLog 输出“voto”的值时,我得到了结果的近似值,后跟“.000000”。

这是代码:

NSInteger domande = [numDomande integerValue];
NSInteger corrette = [numRisposteCorrette integerValue];
float voto = corrette*10/domande;
NSLog(@"float value is: %f", voto);

当我为“domande”分配值 7 并为“corrette”分配 4 值时: voto=5.000000 相反,它应该是 voto=5.71 ...

如何让除法返回不是转换为浮点的整数类型,而是直接返回浮点类型?

4

5 回答 5

9

最简单的方法是:

float voto = 10.0f * corrette / domande;

通过使第一个参数 a float,您可以保证其他参数也将被提升,并且中间和最终结果不会被截断。

corrette您可以通过转换为 a来获得类似的结果,float但我倾向于尽可能简单。

于 2012-09-22T14:14:55.767 回答
5

与其将整数转换为浮点数,不如一开始就得到浮点数:

CGFloat domandeFloat = [numDomande floatValue];
CGFloat corretteFloat = [numRisposteCorrette floatValue];
CGFloat voto = (corretteFloat / domandeFloat) * 10.0f
NSLog(@"float value is: %f", voto);
于 2012-09-22T14:15:32.173 回答
4

NSInteger 没有称为 floatValue 的方法。NSInteger 只是一个整数。相反,解决方案是:

CGFloat domandeFloat = [[NSNumber numberWithInt: numDomande] floatValue];
CGFloat domandeFloat = [[NSNumber numberWithInt: numRisposteCorrette] floatValue];
CGFloat voto = (corretteFloat / domandeFloat) * 10.0f;
于 2013-05-08T13:25:57.620 回答
2

尝试先将 NSIntegers 转换为浮点类型:

float voto = (float)corrette*10/(float)domande;
于 2012-09-22T14:05:42.500 回答
0

您可以将“10”从 int 转换为 float,方法是将其写为“10.0”

  float voto = corrette*10.0/domande;

或者

float voto = ((float)corrette*10) / (float)domande;

操作“/”返回它的操作数类型 - 5/4 将返回 int 结果 1,因为 5 和 4 是 int,而 5.0/4.0 将返回 1.25,因为 5.0 和 4.0 被解释为浮点值。所以你应该手动转换输入变量的类型correttedomande浮动

于 2012-09-22T14:05:59.163 回答