Salut à tous,
Voici la fonction en question :
Code :
- int hhmmToMin(float hhmm)
- {
- int hh = hhmm;
- int mm = (hhmm - hh) * 100;
- return (hh*60 + mm);
- }
|
Son objectif : en gros l'utilisateur tape une heure sous forme de valeur float (genre 12.30 pour 12h30) et la fonction doit transformer ça en nombre de minutes. Vraiment basique quoi a priori.
J'ai décomposé en deux variables pour que ce soit plus clair, même si j'aurais pu inclure la seconde dans le return (voire même les deux premières, avec des cast). Mais là n'est pas le problème.
Si je tape 1.55, la fonction me renvoie 114 (1*60 + 54) et non 115 (1*60 + 55). Avec d'autres valeurs des fois ça fonctionne, des fois non.
Pour hh pas de problèmes, elle prend la partie entière de 1.55, soit 1, par transtypage implicite.
C'est pour mm que ça pose problème : d'après le débuggeur la parenthèse donne bien le résultat escompté (0.550000), la multiplication par 100 aussi (55.0000). Mais lors de la conversion en int pour stocker le tout dans mm... cela donne 54, pas 55.
Ce qu'il y a de marrant, c'est que si je décompose la fonction comme cela :
Code :
- int hhmmToMin(float hhmm)
- {
- int hh = hhmm;
- float mmtemp = (hhmm - hh) * 100;
- int mm = mmtemp;
- return (hh*60 + mm);
- }
|
... et que je mets un breakpoint sur l'avant-dernière ligne, voici ce que me dit le débugger (si je lui demande) :
* mmtemp = 55.0000
* (int)mmtemp = 54
* (int)55.0000 = 55
J'ai essayé de changer de types en mettant des double à la place des float, j'ai aussi essayé de transtyper tout explicitement, rien n'y fait, j'obtiens toujours 114.
C'est sûrement tout con, si qqun peut m'expliquer je suis preneur. Chui pas newbie en C/C++ mais ça fait un mmt que j'en avais pas refait, j'ai dû oublier qq trucs importants
D'ailleurs y'a p-e plus simple pour faire ce que la fonction fait...
Merci d'avance.
Message édité par sielfried le 24-10-2002 à 22:10:09
---------------
StarCraft Professional Gaming Database | [Ze Topic] Starcraft/BroodWar