Ma percentComplete mostra sempre 0
Come stai visualizzando percentComplete? Ricorda che è un float - se lo interpreti come un int senza lanciarlo otterrai l'output sbagliato. Ad esempio, questo:
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
Risulterà:
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
Tenete a mente che lanciare un valore in virgola mobile a un tipo intero solo scarta la roba dopo la virgola - così nel mio esempio 43,8 rende come 43. per arrotondare il valore virgola mobile per l'utilizzo intero più vicino una delle funzioni di arrotondamento da math.h, ad esempio:
#import <math.h>
... rest of code here
NSLog(@"[SW] %i", (int)round(result)); // now prints 44
fonte
2010-09-04 08:44:24
per cominciare, penso che si dovrebbe verificare il divisore per lo zero! –
@Mitch Wheat: Non sarebbe il risultato in NaN? –
ma il divisore è già 4000, "totalCollectionAvailable è 4000" – vodkhang