XL 2010 Problème avec un résultat numérique

Magic_Doctor

XLDnaute Barbatruc
Bonjour,

J'ai une variable numérique, "maVariable", déclarée comme Double (#).
En faisant des essais, j'ai remarqué cette curiosité.
Exemple :
maVariable = 0,13333333333...
si, dans une macro, j'écris :
[E32] = maVariable * 10 --> 1,333333
[E32] = maVariable * 20 --> 2,666666
[E32] = maVariable * 30 --> 4 ................ alors que je m'attendais à 3,99999
Pourquoi cet arrondi quand pour cette valeur de maVariable on la multiplie par 30 (idem avec 60, 90...) et comment y remédier ?

Je signale que si je récupère la valeur de maVariable dans une cellule de la feuille, par ex. [E32] = maVariable, s'affiche bien en E32 0,1333333. En E33 j'écris : = E32 * 30. Résultat : 4 !
Bon, maintenant je rentre manuellement dans la cellule E35 : 0,1333333
En E36 j'écris : = E35 * 30. Résultat : 3,99999

Merci pour toute suggestion.
 
Dernière édition:

Bernard_XLD

XLDnaute Barbatruc
Membre du Staff
Je ne cherchais pas à avoir 3,99999 mais 3,99, voire 3,999.
Il s'agit d'une masse en g et, en pratique, en deçà du cg ou du mg, ça devient de la théorie. Le but est d'afficher dans une cellule cette valeur non arrondie. J'y suis enfin arrivé en bidouillant une fonction.

re, Magic_Doctor, salut Marcel32

pour cela, un simple Int suffit, tu l'appliques à mavariable selon le nombre de décimales que tu veux et c'est fini

Bien cordialement, @+
VB:
MsgBox Int(3.99999999999999 * 1000) / 1000
 

TooFatBoy

XLDnaute Barbatruc
Je ne cherchais pas à avoir 3,99999 mais 3,99, voire 3,999.
Ok, mais 3,99999 ou 3,99 ça reste un résultat faux.
Donc je ne comprends pas pourquoi tu veux afficher ce résultat erroné.

Mais si c'est ce que tu veux, je vois trois possibilités, que j'ai données en #11.
Tu utilises une des trois, en fonction du résultat que tu veux obtenir, et ça devrait être bon. 😉
 
Dernière édition:

TooFatBoy

XLDnaute Barbatruc
Pourquoi 3,99 plutôt que 4, tout simplement pour indiquer que le résultat n'est pas exactement 4.
Comme expliqué en #14, le résultat est 4. ;)

Et même si le résultat était 3,999999999 un arrondi donnerait 4 et non 3,99. ;)
Mais dans ce cas là, si tu tronques la valeur du résultat, ou des valeurs intermédiaires, tu peux afficher 3,99.


Si tu arrondis les valeurs intermédiaires, tu apportes une marge d'erreur.
Si tu tronques ces valeurs, tu rajoutes une marge d'erreur (non calculable à priori).
Plus tu utiliseras de valeurs approximées (comme 1,33333333333 pour 4/3) dans tes calculs intermédiaires, plus le résultat final sera erroné.
Et en tronquant à seulement deux chiffres après la virgules, tu augmentes encore la marge d'erreur.
C'est comme ça que tu finis par avoir 3,99 affiché au lieu de la bonne valeur qui est 4. :'


Si tu as la valeur 3,99999999 et que tu veux afficher 3,99 tu peux peux utiliser =TRONQUE(Ta_Valeur;2).
 

Statistiques des forums

Discussions
312 111
Messages
2 085 407
Membres
102 884
dernier inscrit
Macarena