OVH Cloud OVH Cloud

bug de la fonction Int ?

3 réponses
Avatar
DC
quelqu'un peut-il expliquer pourquoi le calcul suivant :
Int(100 * CDbl("4,85")) retourne la valeur 484 ???

3 réponses

Avatar
Olivier Besson
Tout simplement car il ne faut pas utiliser les doubles et les singles pour
faire des calculs "justes". Ces 2 types sont des valeurs approchées. En fait
4,85 peut trés bien être 4,849999999999... ou 4,85000000001...
Pour des calculs type comptables et/ou avec des valeurs "justes" il faut
utiliser le type currency ou decimal.

--

Olivier Besson
Pour m'ecrire, remplacer le <xx >de mon adresse par <com>.
(Je ne lis pas mes mails frequement)
To write me, replace <xx> part of my address by <com> (i don't read my mails
very frequently).



"DC" a écrit dans le message de news:
05f901c396e4$8867a6b0$
quelqu'un peut-il expliquer pourquoi le calcul suivant :
Int(100 * CDbl("4,85")) retourne la valeur 484 ???


Avatar
Zoury
Salut! :O)

Il y a un peu de ce qu'Olivier à dit et un peu du fait que les fonctions
Int, CInt, Round, CLng, ... effectuent ce qu'on appelle un arrondissement de
banquier.

pour plus de détails :

Cette fiche donne d'autres méthodes pour faire des arrondis:
http://support.microsoft.com/default.aspx?kbid6652

Pour plus d'information du pourquoi du comment VB calcule et fait ses
arrondis:
http://support.microsoft.com/default.aspx?kbid'9755


--
Cordialement
Yanick Lefebvre - MVP pour Visual Basic
http://faq.vb.free.fr/?rubrique=0 - http://www.mvps.org/vbnet/
http://www.mentalis.org/agnet/apiguide.shtml - http://www.mztools.com/

Merci de poster les réponses au groupe afin d'en faire profiter à tous
"DC" wrote in message
news:05f901c396e4$8867a6b0$
quelqu'un peut-il expliquer pourquoi le calcul suivant :
Int(100 * CDbl("4,85")) retourne la valeur 484 ???


Avatar
Patrice Henrio
4,85 s'écrit en binaire

100,11011001100110011001100....
Soit reconverti en décimal 4,84999999403953, multiplié par 100 cela donne
484,999999403953
dont la partie entière est bien 484.



"DC" a écrit dans le message de
news:05f901c396e4$8867a6b0$
quelqu'un peut-il expliquer pourquoi le calcul suivant :
Int(100 * CDbl("4,85")) retourne la valeur 484 ???