2009-08-02 22 views
1

Ich versuche, Minuten und Sekunden basierend auf einer Anzahl von Sekunden anzuzeigen.% Operator für die Zeitberechnung

ich habe:

float seconds = 200; 

float mins = seconds/60.0; 

float sec = mins % 60.0; 

[timeIndexLabel setText:[NSString stringWithFormat:@"%.2f , %.2f", mins,seconds]]; 

Aber ich erhalte eine Fehlermeldung: ungültige Operanden der Typen ‚schweben‘ und ‚doppelte‘ auf binär ‚Operator%‘

Und ich verstehe nicht, warum .. Kann mir jemand einen Knochen werfen?

Antwort

4

Viele Sprachen definieren nur den Operator%, um mit Integer-Operanden zu arbeiten. Versuchen Sie, seconds und mins zu int zu übertragen, bevor Sie% verwenden (oder deklarieren Sie sie an erster Stelle int). Die von Ihnen verwendeten konstanten Werte müssen auch int sein (verwenden Sie 60 statt 60.0).

0

Verwenden Sie stattdessen ints. Zumindest in Ihrem Beispiel scheint es, als wären sie genug (es wird auch schneller und klarer).

Auch in diesem Fall würden Sie 3,3333 ... Minuten, und nicht 3 Minuten wie erwartet erhalten. Sie könnten Math.ceil (x) verwenden, wenn Sie mit Gleitkommazahlen arbeiten müssen.

0

Die 60.0 erzwingt eine Umwandlung in double Versuch:

float seconds = 200; 

float mins = seconds/60; 

float sec = mins % 60; 
+1

dies immer noch nicht funktioniert; Minuten ist ein Float. –

4

Wie andere haben darauf hingewiesen, sollten Sie mit ganzen Zahlen. Jedoch scheint niemand bemerkt zu haben, dass das Ergebnis falsch sein wird. Gehen Sie zurück und haben noch einen Blick auf Moduloarithmetik, und Sie werden erkennen, sollten Sie

int seconds = 200; 
int mins = seconds/60; 
int sec = seconds % 60; 

Beachten Sie die letzte Zeile, tun seconds % 60 statt mins % 60 (die den Rest des Protokolls durch 60 geteilt wird zurückkehren, das ist die Anzahl der Minuten zur vollen Stunde und völlig unabhängig von dieser Berechnung).

EDIT
doh, vergessen, die Ints ... :)

0

wie folgt tun:

float seconds = 200.5; 

float mins = floor(seconds/60.0); 

float sec = seconds - mins * 60.0;