Soucis de calcul pour transformer heure en seconde

Bonsoir,
Le problème est qu il me sort un résultat négatif

lorsque je faits : heure60 j ai le bon résultat mais pas quand je faits heure3600 je me retrouve en négatif

en gros c est :
int current;

current = (heure()*3600)+(minute()*60)+second();

pourtant ca a fonctionné à un moment

quelqu un aurait une idée ?

resolu par :

long current;
et
current = (((long)hour())*3600) + ((long)minute()*60) + (long)second();

Yep!

Comme tes chiffres seront toujours positifs, tu peux optimiser l'utilisation de la mémoire en occultant les nombres négatifs avec unsigned.

unsigned long _hour = hour()*3600;
unsigned long _minute = minute()*60;
unsigned long _seconde = second(): // faut voir si tu peux additionner un [i]int[/i] et un [i]long[/i] ???
unsigned long current = _hour + _minute + _seconde;

par exemple :wink:

@+

Zoroastre.

Bonjour,
Pour optimiser encore plus l'utilisation de mémoire:
long current = (((long)hour())*3600) + ((long)minute()*60) + (long)second(); -> 16 bytes
unsigned long current = (((unsigned long)hour())*3600) + ((unsigned long)minute()*60) + (unsigned long)second(); -> 16 bytes (aucune optimisation)

Extrait de la libraire Time (je m'avance mais je pense que ces de cette libraire que tu sort c'est fonction ?)

hour(); // the hour now (0-23)
minute(); // the minute now (0-59)
second(); // the second now (0-59)

Je pense qu'un truc dans ce genre devrait marcher :
unsigned long current = (((word)hour())*3600) + ((word)minute()*60) + (word)second(); -> 9 bytes
voir peut être mais pas sur que ça marche :
unsigned long current = (((byte)hour())*3600) + ((byte)minute()*60) + (byte)second(); -> 7 bytes

Yep!

Exact skywodd :grin:

Je me suis encore fait avoir par un vieux travers :%

Finalement, la valeur maximale est de 86399 (23h 59m 59s).

@+

Zoroastre.