2010-10-28 15 views
0

I ont la ligne de code suivante qui est en cours d'exécution sur une minuterie:problèmes Objective-C effectuant les mathématiques sur un entier

NSLog(@" seconds: %i, elapsedhours %f", [self elapsedSeconds], [self elapsedSeconds]/3600); 

Il imprime:

seconds: 0, elapsedhours 0.000000 
seconds: 1, elapsedhours 0.000000 
seconds: 2, elapsedhours 0.000000 
seconds: 3, elapsedhours 0.000000 

Je me demande pourquoi écoulé heures ne met pas à jour?

Méthode pour elapsedSeconds:

- (NSUInteger)elapsedSeconds; 
{ 
    NSUInteger seconds = 0; 
    if(![self endDate]) { 
     seconds = [[NSDate date] timeIntervalSinceDate: [self startDate]]; 
     NSLog(@" startdate = %@ no end date %i", startDate, seconds); 
    } 
    else { 
     seconds = [[self endDate] timeIntervalSinceDate: [self startDate]]; 
    } 

    return seconds; 
} 

tout ce que vous les gars/filles ont besoin de voir?

TIA

Répondre

4

Parce que vous utilisez integer division, qui ne calcule pas parties décimales bien que vous imprimez ensuite comme un flotteur.

Vous devez diviser par 3600.0 si vous voulez voir les résultats partiels ..

+0

Merci les gars qui était elle! Je viens du pays de PHP où tout ça se fait magiquement. Difficile d'avoir la tête autour de ces choses. –

0

Un entier divisé par un entier est un entier.

Donc 1/3600 est 0.

Un entier divisé par quelque chose d'autre est quelque chose d'autre

Alors 1/3600.0 est 0.00027777777