Excel 2007 : 2-2=0.0000000000001
Bertrand
-
eriiic Messages postés 24581 Date d'inscription Statut Contributeur Dernière intervention -
eriiic Messages postés 24581 Date d'inscription Statut Contributeur Dernière intervention -
Bonjour,
J'ai importé une liste de nombre en format txt sur excel 2007. Je gère l'importation, mais quand je fais la somme de ces chiffres, Excel me dit que la solution est 2.17458E-13, alors qu'elle devrait être égale à 0.
J'ai vérifié à la main qu'il n'y avait pas d'erreur sur mes chiffres. Je deviens fou.
J'ai importé une liste de nombre en format txt sur excel 2007. Je gère l'importation, mais quand je fais la somme de ces chiffres, Excel me dit que la solution est 2.17458E-13, alors qu'elle devrait être égale à 0.
J'ai vérifié à la main qu'il n'y avait pas d'erreur sur mes chiffres. Je deviens fou.
9 réponses
-
Bonjour à tous,
C'est effectivement l'eternel problème d'Excel avec ses erreurs d'arrondi en virgule flottante.
Une solution pour Excel 2007 est donnée ici par Microsoft soi même:
https://support.microsoft.com/fr-fr/office/d%c3%a9finir-la-pr%c3%a9cision-d-arrondi-e5d707e3-07a8-4df2-810c-218c531eb06a?ocmsassetid=ha010218870&correlationid=adc188c7-8b77-4643-8fe7-4ee969185e59&ui=fr-fr&rs=fr-fr&ad=fr
Ceux qui sont sous 2003 il faut définir les nombres avec 2 chiffres aprés la virgule (pour la compta c'est en général suffisant) et il faut aller dans
Outils/Options/Calcul et cocher la case
"Calcul avec la précision au format affiché"
A+
Cordialement, -
Bonjour
1° expérience:
entrez en H2 la formule:
=SI($G$1:G2)
et tirez vers le bas. Vous verrez que le problème se pose à partie de la ligne 67
je crois que votre problème vient de la colonne E ou les valeurs ont été arrondies pendant le transfert probablement.
2°) 2° expérience
en ligne 64:
placer en I64 la formule:
=E64-ENT(E64)
le résultat qui devrait être de 0,4 soit 478,4-478 est en réalité 0,3999999999999777
Pas grand chose à faire,il semble qu'excel ne puisse pas corriger puisque en E64, la formule:
=SI(F64="C";ARRONDI(-E64;10);ARRONDI(E64;10))
ne change rien aux résultats des expèriences
Reste seulement,si vous pouvez,dans votre cumul , à passer par:
=ARRONDI(=SOMME(G1:G1193);10)
qui vous garantira le 0 parfait avec 10 0 après la virgule.
Peut être est ce suffisant?
crdlmnt
Demandons nous si nous ne sommes pas seuls à comprendre ce que l'on explique? -
Bonjour
comment passez vous du texte au num?
probablement la conversion texte / num ressort des décimales que vous ne détectez pas!
avez vous une exemple de votre problème à placer sur :
http://www.cijoint.fr
en revenant ici placez le lien donné par le site.
crdlmnt
-
-
-
-
-
Are you trolling or just ...
Si ça faisait 0, excel me dirait que la somme est égale à 0 et donc je pourrais importer ces sommes dans mon logiciel. Ce qui n'est pas le cas car.... allez, je vous laisse deviner...
C'est PAS egal à 0. Incroyable non ?
Le problème vient donc d'Excel, qui considère que l'une des sommes est... je sais pas quoi. Donc je pose la question, y-a-t-il une manip à faire pour forcer Excel à ne pas calculer comme un pied ?
-
-
salut
si on veut arrondir définitivement et pas simplement avoir un affichage arrondi il faut utiliser la formule TRONQUE -
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question -
En complément de mon message précédent
En fait si ça vous tente, les copains, le problème apparaît quasiment systématiquement sur la 15° décimale!
TRONQUE ne marche pas, car lorsque la valeur décimale est inférieure, elle est au dessous (ex:0,4 devient 0,399999 )
ARRONDI ne fonctionne pas, ça c'st plus dur à comprendre, mais si on ne remonte pas dans l'origine des données, on ne comprendra pas.
Viennent elles d'un calcul qui n'est pas arrondi au départ?
reste, comme je le dis précédemment, l'arrondi sur le total qui donne bien 0!!!
bonne chance à tous, et surtout au demandeur
crdlmnt
Demandons nous si nous ne sommes pas seuls à comprendre ce que l'on explique? -
Merci bien.
Question subsidiaire, si vous permettez : Comment est-ce possible que Excel modifie une valeur comme ça, pour le fun ?
Parce qu'au départ, la valeur provient d'un fichier txt dans un notepad bête et méchant. Sans calcul sans rien. Une donnée brute de chez brute.-
Là, je vais laisser les esprits fort d'excel vous répondre, car j'en suis incapable. Tout au plus ai je pou vous dire ce que j'ai trouvé, quant à vous dire pourquoi!
C'est d'autant plus inexplicable que lorsqu'on rentre dans votre fichier une valeur dans une cellule pour calculer CELL-ENT(Cell) l'écart se produit dans tous les cas.J'ai testé sur un fichier vierge chez moi:
exemple avec 32,76
chez vous , donne 0,7599999 etc....
chez moi donne: 0,76 ça marche.
Mais si je copie la colonne E de votre fichier dans le mien, terminé, ma formule renvoi 0,75999999 même dans ma 1° entrée.
Conclusion: condoléances, c'est bien votre transfert qui pourrit l'ensemble du fichier! ( le mien est mort, heureusement il était vierge!!
bonne route quand même
-
-
Bonjour,
Ton problème n'est pas dû qu'à excel.
C'est dû aux conversions décimal/binaire (tous les ordis travaillent en binaire) qui génèrent des erreurs d'arrondis qui peuvent se voir sur la dernière décimale.
Pour l'affichage tu peux utiliser le format de cellule 'Comptabilité' (pas monétaire, c'est autre chose), et exporter au format csv (car la valeur est inchangée, seul l'affichage est correct). Beaucoup de logiciel acceptent le csv en import.
Avec le format Comptabilité tes opérations apparaissent comme exactes.
Ou bien en vba utiliser le type currency, type entier (donc plus d'erreur d'arrondi) avec 4 décimales fixes, qui est là pour traiter correctement les tableaux 'de sous' :-)
ex pour traiter une plage sélectionnée (les formules partent) :
Sub monnaie()
' convertit les valeurs des cellules sélectionnées en type currency
' (entier en interne avec virgule fixe à 4 décimales)
' les formules sont perdues, seul le résultat reste !
Dim c As Range
For Each c In Selection
c = CCur(c)
Next c
End Sub
eric -
Salut,
Il doit y avoir une formule qui donne un reliquat au millième voire plus mais sans voir le fichier difficile de juger
si ton fichier ne contient pas de données confidentielles ou crée un fichier exemple que l'on voit ça, à joindre avec un de ces liens comme il t'a déjà été demandé
https://www.cjoint.com/ ou http://www.cijoint.fr/
A+
Mike-31
Une période d'échec est un moment rêvé pour semer les graines du savoir.-
-
Non, finalement il n'y a aucun nombre avec reliquat. D'ailleurs si on fait la somme à l'avancée (somme glissante) dans la colonne H par exemple on trouve bien exactement 0 à la fin.
C'est juste qu'Excel se plante en faisant la somme d'un seul coup sur les 1100 (meme sur les 67 premiers comme l'a remarqué Vaucluse). Il doit passer par un calcul intermédiaire avec un nombre trop grand et il perd de la précision.
D'ailleurs pour contourner le problème il suffit de mettre un format avec 2 ou 3 chiffres aprés la virgule et le tour est joué!!! -
Bonsoir Vaucluse,
Oui j'ai refait tes expériences mais quand je parlais de somme glissante j'ai fait différemment. :
En H1 j'ai mis =G1 puis en H2 j'ai mis =G2+H1 puis j'ai tiré vers le bas jusqu'en H1193.
et la on trouve bien 0 d'ou ma conclusion.
cdlt
EDIT : tiens je reponds au post 18 qui n'est plus là !!!
-
-
Re,
Bizarre comme comportement, qui vient des cellules négatives
j'ai commencé par formater la colonne E, G et H à 15 décimales
en colonne H, en H1 j'ai saisi =G1 pour faire référence à la première cellule, en H2 =H1+G2 et j'ai incrémenté jusqu'a la ligne 1193 et le résultat est bon 0,000000000000000
j'ai donc posé la formule suivante pour additionner les valeurs positives
=SOMME.SI(G1:G1193;">0") ce qui me donne 577557,040000000000000
puis les valeurs négatives
=SOMME.SI(G1:G1193;"<0") et la problème -577557,039999999000000
en décomposant les sommes négatives en deux formules
=SOMME.SI(G1:G100;"<0"), puis =SOMME.SI(G1:G200;"<0") etc... le résultat est erroné au delà de la ligne 1172
j'ai donc fais la somme de la ligne 1172 à la ligne 1193 les résultats sont bon
=SOMME.SI(G1:G1172;"<0") résultat -576808,760000000000000
=SOMME.SI(G1171:G1193;"<0") résultat -748,280000000000000
et en faisant la somme de la ligne 1193 en remontant
=SOMME.SI(G500:G1193;"<0")
jusqu'a la ligne 104 le résultat est bon au delà il est erroné
=SOMME.SI(G104:G1193;"<0")
La solution est de faire un sous total aux environs de la ligne 1000 et d'additionner les sous totaux et le problème est résolu
mais je pense qu'il y a un bugg à ce niveau là, bien que le bugg informatique de nos jours n'est pas un bugg , pour ceux qui le souhaitent je vous donnerais la réelle origine du bugg