Problème fonction Int() VBA

Signaler
Messages postés
7
Date d'inscription
vendredi 22 octobre 2004
Statut
Membre
Dernière intervention
12 juin 2009
-
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
-
Bonjour.
Je dois tronquer un calcul pour ne retenir que sa partie entière.
En l'occurence je suis confronté au cas:

Int(100*0.95) qui me retourne 94 au lieu de 95!!! (que ce soit dans mon programme ou en testant dans la fenêtre d'éxécution)

Bien évidemment 100 et 0.95 ne sont pas les seules valeurs que mon programme pourra utiliser, donc je ne peux pas contourner le problème en écrivant Int(100*0.95+0.1).

Mes questions:
1- Pourquoi cette erreur de calcul?
2- Quelle solution pour tronquer correctement mes calculs?

Merci

4 réponses

Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
75
Salut
Tu peux corriger le tir avec ça
   Int(CDbl(100 * 0.95))
ou Fix (voir l'aide)

Vala
Jack, MVP VB
NB : Je ne répondrai pas aux messages privés

<hr />Le savoir est la seule matière qui s'accroit quand on la partage (Socrate)
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
75
PS : Ce problème n'existe pas en VB.Net : voir catégorie de la question, d'où sont importance. Merci d'y penser la prochaine fois
Messages postés
7
Date d'inscription
vendredi 22 octobre 2004
Statut
Membre
Dernière intervention
12 juin 2009

Merci de la réponse.

Où aurais-je du poster ma question? J'utilise VBA sur excel, j'en avais conclu (peut être à tord) qu'il devait s'agir de VB 2005.

Concernant ton moyen détourné, ça fonctionnne parfaitement.
En revanche Fix() souffre du même problème que Int().
Messages postés
14008
Date d'inscription
samedi 29 décembre 2001
Statut
Modérateur
Dernière intervention
28 août 2015
75
Ok, je corrige la catégorie .Net --> VBA
Bien que la version du VB présente dans la suite Office porte le numéro de révision 6, ce n'est pas du VB6, mais du VBA.
Cela change beaucoup de chose sur les comportements et propriétés des objets.