从NSIntegers之间的划分中获取浮点数

时间:2012-09-22 14:02:17

标签: objective-c floating-point nsinteger

我有两个名为“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 ......

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

5 个答案:

答案 0 :(得分:9)

最简单的方法是:

float voto = 10.0f * corrette / domande;

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

您可以通过将corrette投射到float来获得类似的结果,但我倾向于尽可能简化。

答案 1 :(得分:4)

不是将整数转换为浮点数,而是首先得到浮点数:

CGFloat domandeFloat = [numDomande floatValue];
CGFloat corretteFloat = [numRisposteCorrette floatValue];
CGFloat voto = (corretteFloat / domandeFloat) * 10.0f
NSLog(@"float value is: %f", voto);

答案 2 :(得分:4)

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

CGFloat domandeFloat = [[NSNumber numberWithInt: numDomande] floatValue];
CGFloat domandeFloat = [[NSNumber numberWithInt: numRisposteCorrette] floatValue];
CGFloat voto = (corretteFloat / domandeFloat) * 10.0f;

答案 3 :(得分:2)

首先尝试将NSIntegers转换为float类型:

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

答案 4 :(得分: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的类型转换为float