Iphone 百分比计算始终返回0

Iphone 百分比计算始终返回0,iphone,objective-c,xcode,Iphone,Objective C,Xcode,我在计算某物的百分比。 这是简单的数学。这是代码 float percentComplete = 0; if (todaysCollection>0) { percentComplete = ((float)todaysCollection/(float)totalCollectionAvailable)*100; } 在这里,今天收集的价值是1751,可收集的总价值是4000。两者都是int。 但完成百分比始终显示0。为什么会这样?有人能帮我吗。 我对目标C不熟悉。可能尝试*(

我在计算某物的百分比。 这是简单的数学。这是代码

float percentComplete = 0;
if (todaysCollection>0) {
    percentComplete = ((float)todaysCollection/(float)totalCollectionAvailable)*100;
}
在这里,今天收集的价值是1751,可收集的总价值是4000。两者都是int。 但完成百分比始终显示0。为什么会这样?有人能帮我吗。
我对目标C不熟悉。

可能尝试*(float)100,有时这就是问题所在;)

我认为您对
todaysCollection
totalCollectionAvailable
的值是错误的。仔细检查一下

NSLog(@“%d”,todaysCollection)
放在if语句的前面

但完成百分比始终显示0

你是怎么完成的?请记住它是一个浮点-如果您将它解释为int而不强制转换它,您将得到错误的输出。例如,这:

int x = 1750;
int y = 4000;
float result = 0;
if ( x > 0 ) {
    result = ((float)x/(float)y)*100;
}
NSLog(@"[SW] %0.1f", result);   // interpret as a float - correct
NSLog(@"[SW] %i", result);      // interpret as an int without casting - WRONG!
NSLog(@"[SW] %i", (int)result); // interpret as an int with casting - correct
输出如下:

2010-09-04 09:41:14.966 Test[6619:207] [SW] 43.8
2010-09-04 09:41:14.967 Test[6619:207] [SW] 0
2010-09-04 09:41:14.967 Test[6619:207] [SW] 43
请记住,将浮点值转换为整数类型只会丢弃小数点后的内容,因此在我的示例中,43.8呈现为43。要将浮点值舍入为最接近的整数,请使用math.h中的舍入函数之一,例如:

#import <math.h>

... rest of code here

NSLog(@"[SW] %i", (int)round(result)); // now prints 44
#导入
... 剩下的代码在这里
NSLog(@“[SW]%i”,(int)四舍五入(结果));//现在打印44张

首先,我认为您应该测试除数是否为零@米奇·麦特:这不会导致NaN吗?但是除数已经是4000,“totalCollectionAvailable是4000”@thyrgle:测试除数是否为零仍然是个好主意。您是如何确定各种值的?你能展示一个工作程序吗?也就是说,一个编译并运行但产生错误结果的程序?代码失败没有明显的原因,除非除法是在整数而不是浮点值上进行的。这不可能像写的那样发生…很可能不会,因为只有一个操作数必须是浮点,表达式才能作为浮点计算(由于隐式转换)。不过,这只是我的智慧推论。我不知道它在obj-c中到底是什么样子,但在c#中,我也有类似的问题。(float)/(float)可以在*.int之前强制转换为(int)。float/float总是类型float是的,我知道float/float是float,但是float*int(因为在本例中100是int,而不是float,100.0将是float)可能是int*int的结果。这就是为什么我建议将100强制转换为type。完美,棒极了,谢谢你,爱你!这是正确答案。=)