Pb de 100% [Résolu]

Signaler
Messages postés
123
Date d'inscription
vendredi 14 novembre 2008
Statut
Membre
Dernière intervention
18 juin 2012
-
fcaruso
Messages postés
18
Date d'inscription
vendredi 15 avril 2005
Statut
Membre
Dernière intervention
10 février 2009
-
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

Messages postés
18
Date d'inscription
vendredi 15 avril 2005
Statut
Membre
Dernière intervention
10 février 2009

"%.0f" pour la chaine de formattage...
a+
Fabrice
Messages postés
123
Date d'inscription
vendredi 14 novembre 2008
Statut
Membre
Dernière intervention
18 juin 2012

"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 :"
Messages postés
18
Date d'inscription
vendredi 15 avril 2005
Statut
Membre
Dernière intervention
10 février 2009

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
Messages postés
123
Date d'inscription
vendredi 14 novembre 2008
Statut
Membre
Dernière intervention
18 juin 2012

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.
++
Messages postés
402
Date d'inscription
mardi 1 mai 2001
Statut
Membre
Dernière intervention
15 août 2011

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 ::.)~
Messages postés
18
Date d'inscription
vendredi 15 avril 2005
Statut
Membre
Dernière intervention
10 février 2009

4.294.967.295 Oui pardon ca fait milliards, pas millions... désolé.