Pb de 100%

Résolu
dyroj Messages postés 123 Date d'inscription vendredi 14 novembre 2008 Statut Membre Dernière intervention 18 juin 2012 - 3 févr. 2009 à 00:02
fcaruso Messages postés 18 Date d'inscription vendredi 15 avril 2005 Statut Membre Dernière intervention 10 février 2009 - 5 févr. 2009 à 19:34
salut,
je créer un envoyer de fichier par socket, il marche tres bien et j'ai ajouté un progress bar qui progresse de la facon suivante :



SendMessage(GetDlgItem(hwnd, ID_PROGRESS),PBM_SETPOS , ((

taille_send*100)/



taille_file), 0);





sprintf(pourcentage,


"%d %d/%d"



, ((taille_send*100)/taille_file), taille_send, taille_file);





SetWindowText(hwnd,pourcentage);




il marche tres bien pour les petit fichier de quelque MO mais quand je veut envoyer un fichier un peut volumineu de 200 MO par exemple, le comteur de pourcentage maffiche le bon resulta pour taille_send et taille_file mais pour ((taille_send*100)/taille_file)
sa maffiche un 100% correcte jusqu'à 6% mais apres  sa decend comme sa : -6 -5 -4 -3 -2 -1 0 arriver a zero sa repart normalement : 1 ... 6 -6 -5...
je c'est bien que je mexprime mal et que je fait beaucoup de faute alors sa ne sert a rien de me gronder lol.
++

6 réponses

fcaruso Messages postés 18 Date d'inscription vendredi 15 avril 2005 Statut Membre Dernière intervention 10 février 2009
3 févr. 2009 à 07:57
"%.0f" pour la chaine de formattage...
a+
Fabrice
3
dyroj Messages postés 123 Date d'inscription vendredi 14 novembre 2008 Statut Membre Dernière intervention 18 juin 2012
3 févr. 2009 à 00:05
"salut,
je créé un envoyeur de fichier par socket, il marche tres bien et j'ai ajouté un progress bar qui progresse de la facon suivante :"
0
fcaruso Messages postés 18 Date d'inscription vendredi 15 avril 2005 Statut Membre Dernière intervention 10 février 2009
3 févr. 2009 à 00:53
c'est parce que tu travaille sur des int
un int, si tu compiles en 32bits, c'est 32 bits, et comme c'est signé, ben... le maxi c'est 2 millions environ.
Divisé par 100, ca fait que passé 20 megas environ, ton pourcentage va partir en vrille....

Y'a plein de facons de faire.
Soit tu cast en double du genre : (((double) taille_send)*100.0)/(double) taille_file.
Sinon, en int ben c'est des maths : taille_send/(taille_ville/100). -> mais attention si taille_ville < 100 tu va avoir une division par zero.

Bonne chance

Fabrice
0
dyroj Messages postés 123 Date d'inscription vendredi 14 novembre 2008 Statut Membre Dernière intervention 18 juin 2012
3 févr. 2009 à 01:12
ho merci,
sa marche voila se que sa donne :
SendMessage(GetDlgItem(hwnd_main,ID_PROGRESS),PBM_SETPOS , (((

double)taille_send*100.0)/(
double)taille_file), 0);sprintf(pourcentage,

"%lf", (((
double)taille_send*100.0)/(
double)taille_file));SetWindowText(hwnd_main,pourcentage);

le probleme maintenant c'est que moi je ne veut pas afficher decimale mais un nombre entier , car la sa maffiche 100,00000.
aurai tu une solution.
++
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
NitRic Messages postés 402 Date d'inscription mardi 1 mai 2001 Statut Membre Dernière intervention 15 août 2011
5 févr. 2009 à 09:07
fcaruso, signed int c'est un peu plus de 2 milliard et pas million, non signé c'est un peu plus de 4 milliard
d'après moi ce serait plus simple et rapide un entier 64 bits plutôt qu'un lourd flottant, « long long » ou « __int64 » même sur une plate-forme 32bits

en passant, que l'on compile sous Windows 32/64 bits (plate-forme PC), int et long reste 32 bits sauf pour les pointeurs qui deviennent 64 bits sous Windows 64 bits et 32 bits sous Windows 32 bits, pour du 64 bits (Windows 32/64 bits - PC), il y a __int64 (ou « long long » avec le support du C99), sous linux 64 bits (PC) c'est différent, int reste 32 bits mais long devient 64 bits comme les pointeurs, sous linux 32 bits (PC), int et long sont 32 bits, comme les pointeurs ...

~(.:: NitRic ::.)~
0
fcaruso Messages postés 18 Date d'inscription vendredi 15 avril 2005 Statut Membre Dernière intervention 10 février 2009
5 févr. 2009 à 19:34
4.294.967.295 Oui pardon ca fait milliards, pas millions... désolé.
0
Rejoignez-nous