百分比计算始终返回0

时间:2010-09-04 05:08:52

标签: iphone objective-c xcode

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

float percentComplete = 0;
if (todaysCollection>0) {
    percentComplete = ((float)todaysCollection/(float)totalCollectionAvailable)*100;
}

这里todaysCollection的值是1751,而totalCollectionAvailable是4000.两者都是int。 但是percentComplete总是显示0.为什么会发生这种情况?谁能帮我吗。 我是Objective C的新手。

3 个答案:

答案 0 :(得分:11)

  

但是percentComplete总是显示为0

您如何显示percentComplete?请记住它是一个浮点数 - 如果你把它解释为一个没有强制转换它的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

答案 1 :(得分:1)

我认为您todaysCollectiontotalCollectionAvailable的价值是错误的。仔细检查一下。

NSLog(@"%d", todaysCollection)放在if语句

之前

答案 2 :(得分:0)

也许尝试使用*(float)100,有时这就是问题;)