Fonction TRONQUE résultats anormaux
Résolu
funnyfranky
-
eriiic Messages postés 25847 Statut Contributeur -
eriiic Messages postés 25847 Statut Contributeur -
Bonjour
J'ai des résultats irréguliers en utilisant la fonction TRONQUE ou même la fonction ARRONDI.INF. À l'intérieur d'une plus grande formule j'utilise ceci pour extraire les centimes d'un montant : =TRONQUE((J4-TRONQUE(J4))*100)
Si ma case J4 = 100000.03, le résultat attendu est 3 mais j'obtiens plutôt 2.
Si ma case J4 = 0.03, j'obtiens 3 donc pas de problème.
Si ma case J4 = 50.04, le résultat attendu est 4 mais j'obtiens plutôt 3.
Quelqu'un peut m'expliquer pourquoi je n'obtiens pas les résultats qui devrait être obtenus par calcul mathématique? Est-ce que mon ordinateur est possédé par un esprit malveillant? Avez-vous une formule alternative à la mienne qui me donnerait le bon résultat à coup sur?
Merci d'avance.
J'ai des résultats irréguliers en utilisant la fonction TRONQUE ou même la fonction ARRONDI.INF. À l'intérieur d'une plus grande formule j'utilise ceci pour extraire les centimes d'un montant : =TRONQUE((J4-TRONQUE(J4))*100)
Si ma case J4 = 100000.03, le résultat attendu est 3 mais j'obtiens plutôt 2.
Si ma case J4 = 0.03, j'obtiens 3 donc pas de problème.
Si ma case J4 = 50.04, le résultat attendu est 4 mais j'obtiens plutôt 3.
Quelqu'un peut m'expliquer pourquoi je n'obtiens pas les résultats qui devrait être obtenus par calcul mathématique? Est-ce que mon ordinateur est possédé par un esprit malveillant? Avez-vous une formule alternative à la mienne qui me donnerait le bon résultat à coup sur?
Merci d'avance.
A voir également:
- Tronque excel
- Liste déroulante excel - Guide
- Word et excel gratuit - Guide
- Déplacer colonne excel - Guide
- Si ou excel - Guide
- Excel trier par ordre croissant chiffre - Guide
7 réponses
Bonjour,
Il s'agit d'un problème d'arrondi lors de la conversion du décimal en binaire (malheureusement tous les processeur actuels travaillent en binaire).
Tu peux utiliser la formule suivante :
=MOD(ENT(J4*100)/100;1)*100
Cordialement
Patrice
Il s'agit d'un problème d'arrondi lors de la conversion du décimal en binaire (malheureusement tous les processeur actuels travaillent en binaire).
Tu peux utiliser la formule suivante :
=MOD(ENT(J4*100)/100;1)*100
Cordialement
Patrice
Merci à vous deux pour vos réponses et explications. Je vais vous donner plus d'info car je n'ai rien pu régler. J'utilise ceci à l'intérieur d'une fonction RECHERCHEV donc je dois utiliser un TRONQUE de plus sinon j'ai une erreur "#N/A" en utilisant que:
=RECHERCHEV((J4-TRONQUE(J4))*100;Tableau1;2;FAUX)
ou même:
=RECHERCHEV(MOD(ENT(J4*100)/100;1)*100;Tableau1;2;FAUX)
et en faisant ceci je n'obtiens toujours pas le bon résultat:
=RECHERCHEV(TRONQUE(MOD(ENT(J4*100)/100;1)*100);Tableau1;2;FAUX)
=RECHERCHEV((J4-TRONQUE(J4))*100;Tableau1;2;FAUX)
ou même:
=RECHERCHEV(MOD(ENT(J4*100)/100;1)*100;Tableau1;2;FAUX)
et en faisant ceci je n'obtiens toujours pas le bon résultat:
=RECHERCHEV(TRONQUE(MOD(ENT(J4*100)/100;1)*100);Tableau1;2;FAUX)
Re,
TRONQUE avec une RECHERCHEV c'est possible mais dans ta matrice comment sont les valeurs recherchées
tu devrais mettre à notre disposition un bout de ton fichier anonymisé à joindre à partir de ce lien
https://www.cjoint.com/
TRONQUE avec une RECHERCHEV c'est possible mais dans ta matrice comment sont les valeurs recherchées
tu devrais mettre à notre disposition un bout de ton fichier anonymisé à joindre à partir de ce lien
https://www.cjoint.com/
Voici le lien vers mon fichier: http://www.cjoint.com/c/EGpuVJ3e73Y
Attention la formule risque de vous faire saigner des yeux.
C'est préliminaire et il reste probablement quelques erreurs grammaticales d'accord mais bref, vous entrez un montant <1 milliard dans la case jaune et la formule convertit le nombre en lettre dans la case rouge.
Essayez d'entrer le nombre "100000.01" dans la case jaune et vous verrez un premier problème apparaître.
Merci pour votre aide!
Attention la formule risque de vous faire saigner des yeux.
C'est préliminaire et il reste probablement quelques erreurs grammaticales d'accord mais bref, vous entrez un montant <1 milliard dans la case jaune et la formule convertit le nombre en lettre dans la case rouge.
Essayez d'entrer le nombre "100000.01" dans la case jaune et vous verrez un premier problème apparaître.
Merci pour votre aide!
Bonjour,
Pour éviter les problèmes d'imprécision issus de la représentation binaire des nombres, tu peux remplacer les formules numériques par des formules travaillant sur des chaînes de caractères pour la partie décimale de ton nombre.
Ainsi, ton TRONQUE((J4-TRONQUE(J4))*100) deviendra --DROITE(TEXTE(D4;"#,00");NBCAR(TEXTE(D4;"#,00"))-TROUVE(",";TEXTE(D4;"#,00"))).
Quand tu travailles sur la partie entière de ton nombre, tu peux garder tes formules numériques.
au bout du compte tu auras :
cordialement
Pour éviter les problèmes d'imprécision issus de la représentation binaire des nombres, tu peux remplacer les formules numériques par des formules travaillant sur des chaînes de caractères pour la partie décimale de ton nombre.
Ainsi, ton TRONQUE((J4-TRONQUE(J4))*100) deviendra --DROITE(TEXTE(D4;"#,00");NBCAR(TEXTE(D4;"#,00"))-TROUVE(",";TEXTE(D4;"#,00"))).
Quand tu travailles sur la partie entière de ton nombre, tu peux garder tes formules numériques.
au bout du compte tu auras :
SI(D4>=1000000000;"ERREUR VALEUR TROP GRANDE";SI(TRONQUE(D4/1000000)=0;"";RECHERCHEV(TRONQUE(D4/1000000);Tableau1;2;FAUX)&SI(ET(D4/100000000-ENT(D4/100000000)=0;D4/1000000<>100);"S";"")&SI(TRONQUE(D4/1000000)<2;" MILLION";" MILLIONS"))&SI(TRONQUE(DROITE(TRONQUE(D4/1000);3))=0;"";" "&RECHERCHEV(TRONQUE(DROITE(TRONQUE(D4/1000);3));Tableau1;2;FAUX)&" MILLE")&SI(TRONQUE(DROITE(TRONQUE(D4);3))=0;"";" "&RECHERCHEV(TRONQUE(DROITE(TRONQUE(D4);3));Tableau1;2;FAUX))&SI((--DROITE(TEXTE(D4;"#,00");NBCAR(TEXTE(D4;"#,00"))-TROUVE(",";TEXTE(D4;"#,00")))*100)=0;"";" ET "&RECHERCHEV(--DROITE(TEXTE(D4;"#,00");NBCAR(TEXTE(D4;"#,00"))-TROUVE(",";TEXTE(D4;"#,00")));Tableau1;2;FAUX)))
cordialement
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Bonjour,
avec 0.01 en D4, =DROITE(TEXTE(D4;"#,00")) me ramène 0 chez moi JvDo.
ARRONDI((MOD(D4;1))*100;0) a l'air de fonctionner :
eric
avec 0.01 en D4, =DROITE(TEXTE(D4;"#,00")) me ramène 0 chez moi JvDo.
ARRONDI((MOD(D4;1))*100;0) a l'air de fonctionner :
=SI(D4>=1000000000;"ERREUR VALEUR TROP GRANDE";SI(TRONQUE(D4/1000000)=0;"";RECHERCHEV(TRONQUE(D4/1000000);Tableau1;2;FAUX)&SI(ET(D4/100000000-ENT(D4/100000000)=0;D4/1000000<>100);"S";"")&SI(TRONQUE(D4/1000000)<2;" MILLION";" MILLIONS"))&SI(TRONQUE(DROITE(TRONQUE(D4/1000);3))=0;"";" "&RECHERCHEV(TRONQUE(DROITE(TRONQUE(D4/1000);3));Tableau1;2;FAUX)&" MILLE")&SI(TRONQUE(DROITE(TRONQUE(D4);3))=0;"";" "&RECHERCHEV(TRONQUE(DROITE(TRONQUE(D4);3));Tableau1;2;FAUX))&SI(ARRONDI((MOD(D4;1))*100;0)=0;"";" ET "&RECHERCHEV(ARRONDI((MOD(D4;1))*100;0);Tableau1;2;FAUX)))
eric
Salut JvDo,
Laisse tomber, je n'avais pas suffisamment analysé ce matin pourquoi ta formule ne fonctionnait pas chez moi.
En fait mon séparateur décimal est le point. Ceci explique cela :-)
Les TROUVE(",";...) ne m'ont pas sautés au yeux.
Désolé pour la suée, ta formule est correcte même chez moi ;-)
eric
Laisse tomber, je n'avais pas suffisamment analysé ce matin pourquoi ta formule ne fonctionnait pas chez moi.
En fait mon séparateur décimal est le point. Ceci explique cela :-)
Les TROUVE(",";...) ne m'ont pas sautés au yeux.
Désolé pour la suée, ta formule est correcte même chez moi ;-)
eric
Bonjour à tous,
Une bidouille remédie à certaines erreurs:
=TRONQUE((D8+0,0001-TRONQUE(D8))*100)
Pour l' orthographe " quarante" en urgence, et pour le reste voir un très bon condensé sur cette page:
http://olivier.miakinen.free.fr/vrac/nombres.php#lettres_cent
Une bidouille remédie à certaines erreurs:
=TRONQUE((D8+0,0001-TRONQUE(D8))*100)
Pour l' orthographe " quarante" en urgence, et pour le reste voir un très bon condensé sur cette page:
http://olivier.miakinen.free.fr/vrac/nombres.php#lettres_cent