Ale percentComplete zawsze pokazuje 0
Jak ty wyświetlania PERCENTCOMPLETE? Pamiętaj, że jest to float - jeśli zinterpretujesz to jako int bez rzucania, otrzymasz nieprawidłowy wynik. Na przykład w ten sposób:
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
Wyjścia to:
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
Należy pamiętać, że rzucając wartość zmiennoprzecinkową do typu całkowitego prostu odrzuca rzeczy po przecinku - tak w moim przykładzie 43.8 renderuje jako 43. aby zaokrąglić wartość zmiennoprzecinkową do najbliższej liczby całkowitej wykorzystania jednej z funkcji zaokrąglania z math.h, np:
#import <math.h>
... rest of code here
NSLog(@"[SW] %i", (int)round(result)); // now prints 44
na początek, myślę, że należy przetestować dzielnik do zera! –
@Mitch Wheat: Czy to nie wpłynęłoby na NaN? –
ale dzielnik ma już 4000, "totalCollectionAvailable is 4000" – vodkhang