MorpionMx
Messages postés3466Date d'inscriptionlundi 16 octobre 2000StatutMembreDernière intervention30 octobre 200857 2 févr. 2008 à 21:51
Salut,
Regarde tes conditions if. Tu est en train de récuperer la longeur de la chaine qui contient la taille de ton fichier.
En bref, si la taille de ton fichier est '10245', la valeur de la propriété strTampon.Length est 5 (5 caracteres)...
Changes ta confition if par (fi.Length >= 1024), ...
Autre petit souci, si la valeur est plus grande que 1024, tu ne rentreras jamais dans ta seconde condition...(si la taille est plus grande que 1048576, elle est forcément plus grande que 1024). Inverses les
MorpionMx
Messages postés3466Date d'inscriptionlundi 16 octobre 2000StatutMembreDernière intervention30 octobre 200857 2 févr. 2008 à 22:08
Le resultat d'une division par un entier est un entier.
Si tu veux que ton resultat soit un float, divise par (float)1024, ou 1024f (façon plus élégante de l'écrire)
Mx
MVP C#
sliverman
Messages postés83Date d'inscriptionvendredi 17 juin 2005StatutMembreDernière intervention 8 juillet 2008 2 févr. 2008 à 21:56
Je te remercie sa fonctionne par contre je récupère des fichier de 6Mo par exemple sans chiffre après la virgule, comment ca se fait ? j'en voudrais au moins deux ^^
Vous n’avez pas trouvé la réponse que vous recherchez ?
Julien237
Messages postés883Date d'inscriptionvendredi 3 novembre 2000StatutMembreDernière intervention 3 mars 20097 3 févr. 2008 à 21:59
total est de type long, donc un entier, donc ToString("0.00") renvera toujours quelque chose de la forme de
"xxxx.00"
Ce qui n'est pas ce que tu cherche je présume.
Je pense que tu voudrais plutot faire :
long total = 0;
//dans la boucle
total += fi.Length;
Julien237
Messages postés883Date d'inscriptionvendredi 3 novembre 2000StatutMembreDernière intervention 3 mars 20097 3 févr. 2008 à 22:09
En fait, pour expliquer l'erreur entre 5.83 et 10 qui est quand même plus grande qu'une simple erreur d'arrondi, il faut un petit peu analyser ton algorithme pour se rendre compte qu'il contient une grande faiblesse :
Lorsque tu fais :
total += fi.Length / 1048576L
total est incrémenté de la division entière de fi.Length par 1024^2, ce qui signifie que la partie décimale de la vraie réponse est tronquée. Sur N itérations, tu fais donc une erreur de au plus N.
Ce qui est très ennuyeux par rapport à d'autres algorithmes avec une majoration d'erreur semblable, c'est qu'elle porte toujours le même signe, en effet la division entière sera toujours plus petite ou égale à la division réelle. Tu auras donc toujours une erreur relativement importante, ce qui explique la différence entre 5.84 et 10.
Par contre avec la modification que je te propose, total est parfaitement exact jusqu'à la fin de l'algorithme, et ce n'est qu'à la division lors de l'affichage qu'un arrondi est fait.
Tout ce bla-bla pour dire qu'il est important de regarder ce que l'on fait et comme quoi deux algorithmes à priori très semblables peuvent donner des réponses très différentes...