Mais percentComplete montre toujours 0
Comment affichiez percentComplete vous? Gardez à l'esprit que c'est un float - si vous l'interprétez comme un int sans le lancer, vous obtiendrez la mauvaise sortie. Par exemple, ceci:
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
Sorties ceci:
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
Gardez à l'esprit que la coulée d'une valeur à virgule flottante à un type entier défausse juste les choses après la virgule - donc dans mon exemple 43,8 rend comme 43. pour arrondir la valeur en virgule flottante au plus proche usage entier l'une des fonctions d'arrondissement de math.h, par exemple:
#import <math.h>
... rest of code here
NSLog(@"[SW] %i", (int)round(result)); // now prints 44
pour commencer, je pense que vous devriez tester le diviseur zéro! –
@Mitch Wheat: Cela ne se traduirait-il pas par NaN? –
mais le diviseur déjà 4000, "totalCollectionAvailable is 4000" – vodkhang