Fonction TRONQUE résultats anormaux

Résolu
funnyfranky -  
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.



A voir également:

7 réponses

Mike-31 Messages postés 19571 Statut Contributeur 5 136
 
Bonsoir,

Essaye comme cela

=(J4-TRONQUE(J4))*100
0
Patrice33740 Messages postés 8930 Statut Membre 1 781
 
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
0
funnyfranky
 
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)
0
Mike-31 Messages postés 19571 Statut Contributeur 5 136
 
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/

0
funnyfranky
 
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!
0
JvDo Messages postés 2012 Statut Membre 859
 
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 :
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
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
eriiic Messages postés 25847 Statut Contributeur 7 279
 
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 :
=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
0
JvDo Messages postés 2012 Statut Membre 859
 
Bonjour eriiic,

Surprenant......

Si tu as le temps de mettre un fichier avec l'anomalie, je suis preneur.

Sinon, ARRONDI(MOD()) fonctionne très bien aussi.

Cordialement
0
eriiic Messages postés 25847 Statut Contributeur 7 279
 
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
0
tontong Messages postés 2584 Statut Membre 1 062
 
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
0
funnyfranky
 
Excellent! J'ai pu régler mon problème avec ARRONDI(MOD()). Merci pour toutes vos réponses rapides et vive la France!
0