web-dev-qa-db-fra.com

Dans Excel, lorsque j'entre 22222.09482, je vois le numéro 22222.0948199999 dans la barre de formule

Pourriez-vous s'il vous plaît aider - car j'ai une situation étrange que lorsque j'entre un numéro 22222.09482 dans la cellule, je vois un numéro différent 22222.0948199999 dans la barre de formule. Vous trouverez ci-dessous un aperçu du problème.

Sample error

Je constate le même comportement lorsque j'entre les chiffres suivants:

22222.09482
33333.09482
44444.09482
55555.09482

mais quand j'entre 11111.09482 et 66666.09482, 77777.09482 .. jusqu'à 99999.09482, ils s'affichent correctement. Je ne suis pas sûr que cela soit lié à l'arrondissement. Je n'ai pas configuré de profils d'arrondi. Pourriez-vous s'il vous plaît m'aider à résoudre le problème.

28
user954171

C'est un bug.

Excel utilise la représentation habituelle à double précision IEEE, selon d’autres réponses. Sa précision est de 53 chiffres binaires significatifs, ce qui correspond à environ 16 chiffres décimaux.

Il est toujours "sûr" d’afficher les premiers décimales _ {15/. En ce sens que tout nombre décimal "présenté" donné avec 15 chiffres peut être distingué en toute sécurité des nombres obtenus en modifiant le 15ème chiffre décimal par un. Par exemple, les nombres à 15 chiffres:

22222.09481 99999
22222.09482 00000
22222.09482 00001

mapper sur trois distincts nombres à double précision. Aucun de ces trois ne sera "voisin" dans la représentation en double précision, dans ce cas particulier.

Donc, confondre les deux premiers dans l’affichage de l’utilisateur, est un bogue d’Excel.

En fait, dans ce domaine (entre 16384 et 32768), la précision absolue est 2-38, et les nombres suivants sont représentables:

...
22222.09481 99998 96571 9714760780334472656250000
22222.09481 99999 00209 9502831697463989257812500 <-- the one closest to what Excel showed to the user
22222.09481 99999 03847 9290902614593505859375000
22222.09481 99999 07485 9078973531723022460937500
22222.09481 99999 11123 8867044448852539062500000
22222.09481 99999 14761 8655115365982055664062500
22222.09481 99999 18399 8443186283111572265625000
22222.09481 99999 22037 8231257200241088867187500
22222.09481 99999 25675 8019328117370605468750000
22222.09481 99999 29313 7807399034500122070312500
22222.09481 99999 32951 7595469951629638671875000
22222.09481 99999 36589 7383540868759155273437500
22222.09481 99999 40227 7171611785888671875000000
22222.09481 99999 43865 6959682703018188476562500
22222.09481 99999 47503 6747753620147705078125000
22222.09481 99999 51141 6535824537277221679687500
22222.09481 99999 54779 6323895454406738281250000
22222.09481 99999 58417 6111966371536254882812500
22222.09481 99999 62055 5900037288665771484375000
22222.09481 99999 65693 5688108205795288085937500
22222.09481 99999 69331 5476179122924804687500000
22222.09481 99999 72969 5264250040054321289062500
22222.09481 99999 76607 5052320957183837890625000
22222.09481 99999 80245 4840391874313354492187500
22222.09481 99999 83883 4628462791442871093750000
22222.09481 99999 87521 4416533708572387695312500
22222.09481 99999 91159 4204604625701904296875000
22222.09481 99999 94797 3992675542831420898437500
22222.09481 99999 98435 3780746459960937500000000 <-- the one closest to what the user types
22222.09482 00000 02073 3568817377090454101562500
22222.09482 00000 05711 3356888294219970703125000
22222.09482 00000 09349 3144959211349487304687500
22222.09482 00000 12987 2933030128479003906250000
22222.09482 00000 16625 2721101045608520507812500
22222.09482 00000 20263 2509171962738037109375000
22222.09482 00000 23901 2297242879867553710937500
22222.09482 00000 27539 2085313796997070312500000
22222.09482 00000 31177 1873384714126586914062500
22222.09482 00000 34815 1661455631256103515625000
22222.09482 00000 38453 1449526548385620117187500
22222.09482 00000 42091 1237597465515136718750000
22222.09482 00000 45729 1025668382644653320312500
22222.09482 00000 49367 0813739299774169921875000
22222.09482 00000 53005 0601810216903686523437500
22222.09482 00000 56643 0389881134033203125000000
22222.09482 00000 60281 0177952051162719726562500
22222.09482 00000 63918 9966022968292236328125000
22222.09482 00000 67556 9754093885421752929687500
22222.09482 00000 71194 9542164802551269531250000
22222.09482 00000 74832 9330235719680786132812500
22222.09482 00000 78470 9118306636810302734375000
22222.09482 00000 82108 8906377553939819335937500
22222.09482 00000 85746 8694448471069335937500000
22222.09482 00000 89384 8482519388198852539062500
22222.09482 00000 93022 8270590305328369140625000
22222.09482 00000 96660 8058661222457885742187500
22222.09482 00001 00298 7846732139587402343750000
...

Pour plus de détails, essayez de saisir 22222.09482 dans une cellule, puis de saisir 22222.0948199999 (cinq derniers suffixes) dans une autre cellule. Excel doit sélectionner les deux représentants IEEE indiqués par la flèche ci-dessus. Et je pense que oui, car vous pouvez calculer la différence entre ces deux cellules pour obtenir 9.82254E-11. Mais les deux sont montrés de la même manière.

SiExcel avait indiqué les premiers17chiffres, il serait utile de choisir exactement quel numéro IEEE est "sous" le nombre décimal. Dans ce cas:

22222.0948199999 --> 22222.09481 99999 00
22222.09482      --> 22222.09481 99999 98

Mais afficher 15 chiffres arrondis de manière incorrecte est trompeur et inutile.


Avant que quiconque ne prétende que c'est intentionnel, pourquoi alors 8.7 ne montre-t-il pas le même comportement? Le nombre double précision le plus proche de 8.7 est:

8.69999999999999 93

il devrait donc indiquer 8.69999999999999 si cela était intentionnel. Mais ce n'est pas le cas.

31
Jeppe Stig Nielsen

Excel enregistre les nombres au format binaire à virgule flottante 64 bits IEEE 754 . La clé est "stocke" - le passage de décimal à binaire a lieu chaque fois qu'un nombre est stocké, pas seulement lorsqu'il est utilisé dans un calcul réel.

Un bon article à ce sujet est à la page Comprendre la précision en virgule flottante, alias «Pourquoi Excel me donne-t-il apparemment de mauvaises réponses?»

Il est possible de créer un tableur capable de traiter de très gros nombres avec beaucoup de chiffres significatifs. Mais ce n'est pas terriblement pratique. Excel pourrait a été conçu pour utiliser le format décimal128 IEEE 754 , qui autorise 34 chiffres décimaux - plus que suffisant pour stocker 22222.09482. Mais au lieu de cela, il utilise le format beaucoup plus répandu binary64 Double Precision , qui possède une précision de 53 bits, soit un peu moins de 16 chiffres. Bien que vous pensiez que cela suffirait pour un nombre de 10 chiffres seulement, la conversion décimale en binaire complique un peu les choses: 2222209482 peut être stocké à 100% correctement sous forme de nombre binaire64, mais 22222.09482 ne le peut pas.

N'oubliez pas que les feuilles de calcul {typiquement _ sont utilisées pour les données financières, qui n'exigent généralement pas autant de chiffres de précision, ou pour la modélisation "what if" dans une variété de scénarios, où un niveau de précision extrêmement élevé n'est pas nécessaire. Il existe certainement d’autres outils (et probablement d’autres tableurs, mais je n’ai pas fait de recherche récemment) qui, par défaut ou en fonction de paramètres de configuration spéciaux, peuvent utiliser un format numérique plus grand, mais Excel n’en fait pas partie.

Pour ceux qui soulignent que LibreOffice gère cela mieux, les apparences peuvent être trompeuses. Voir ce post pour plus de détails. Il semble que LibreOffice traite les grands nombres légèrement différemment, mais a la même représentation de base à virgule flottante de 64 bits avec des problèmes similaires.

23
manassehkatz

Lors de ses calculs, Excel doit trouver une bonne représentation binaire interne pour les nombres qu’il utilise. Dans votre cas, il utilise un nombre à virgule flottante et, en fait, ce format de données a une (très bonne) approximation de votre nombre, mais aucune correspondance exacte. Par conséquent, si vous ne précisez pas explicitement à Excel le format de sortie à utiliser, le résultat sera "optimal", ce qui donnera un résultat plus proche de la valeur calculée en interne, mais ne correspond pas exactement au texte que vous entrez.

Pour que ce soit bien clair, comprenez bien que le texte que vous avez entré représente un nombre et que la séquence de chiffres convertie en un nombre correspond déjà à la définition du "calcul" présentée ci-dessus.

MODIFIER

Je n’ai pas expliqué suffisamment le fait que je considère que le choix d’utiliser une représentation à virgule flottante de 64 bits est un bon choix: Excel n’est pas un outil pour les scientifiques, où une erreur d’arrondi dans le onzième chiffre après la virgule rend Un impact important, mais les comptables ne veulent pas que leur vitesse de traitement soit réduite d'un facteur de plusieurs millions de dollars afin de compenser une source de calcul inexact qui pourrait se manifester par des nombres qu'ils n'utilisent jamais.

Si vous utilisez un tableur pour ce pour quoi il a été conçu et que vous utilisez un formatage de sortie explicite pour vous assurer que ces effets ne rentrent jamais dans le domaine visible, tout ira bien.

11
Eugen Rieck

Lorsque je saisis 11111.09482 et 66666.09482, 77777.09482 .. jusqu’à 99999.09482, ils s’affichent correctement. Je ne suis pas sûr que cela soit lié à l'arrondissement. Je n'ai pas configuré de profils d'arrondi. Pourriez-vous s'il vous plaît m'aider à résoudre le problème.

Certains nombres peuvent être représentés correctement et d'autres non.

Définissez la précision affichée de manière appropriée pour vos calculs et utilisez la fonction round ().

  • Explication:

  • Solution:

    Vous pouvez fréquemment empêcher les erreurs d'arrondi en virgule flottante d'affecter votre travail en définissant l'option Précision telle qu'affichée avant d'appliquer un format de nombre à vos données. Cette option force la valeur de chaque nombre dans la feuille de calcul à la précision affichée dans la feuille de calcul.

    1. Cliquez sur Fichier> Options.
      Dans Excel 2007: Cliquez sur l'image du bouton Microsoft Office Button Office, puis sur Options Excel.
       Button Image

    2. Cliquez sur Avancé, puis sous Lors du calcul de ce classeur, cochez la case Définir la précision telle qu'elle s'affiche, puis cliquez sur OK.

    3. Cliquez sur OK.

    4. Dans la feuille de calcul, sélectionnez les cellules que vous souhaitez formater.

    5. Sous l'onglet Accueil, cliquez sur l'image du bouton Lanceur de boîte de dialogue en regard de Nombre.
       Launcher Button Image
       Excel Ribbon Image

    6. Dans la zone Catégorie, cliquez sur Nombre.

    7. Dans la zone Nombre de décimales, entrez le nombre de décimales à afficher.

    Conseil: Pour minimiser les effets de l'inexactitude du stockage arithmétique en virgule flottante, vous pouvez également utiliser la fonction ROUND pour arrondir les nombres au nombre de décimales requis par votre calcul.

  • Journal of Accountancy - " Inscrit par les erreurs de calcul d'Excel ":

    Certains nombres impairs créent des décimales binaires répétitives, et lorsque ces chiffres répétitifs sont coupés après 15 positions, le nombre binaire ne est pas reconverti avec précision à la valeur numérique souhaitée. Par exemple, dans toutes les éditions d'Excel, la formule 22.26 - 21.29 devrait donner 0,97, mais à la place 0,970000000000002. Essayez-le et pensez à augmenter la largeur de la colonne et le nombre de décimales pour pouvoir voir le problème de calcul.

    De telles erreurs sont généralement considérées comme insignifiantes ou immatérielles car elles se traduisent rarement par des erreurs de calcul significatives; néanmoins, vous pouvez prendre deux mesures pour éliminer les erreurs potentielles de virgule décimale flottante:

    1. La fonction ROUND. Utilisez la fonction ROUND d’Excel pour arrondir vos valeurs calculées à la décimale souhaitée, éliminant ainsi toute possibilité d’anomalie à 15 chiffres. Par exemple, la formule = ROUND (-21.29 + 22.26,2) donne exactement 0.97.

    2. Précision. Vous pouvez activer l’option Précision telle qu’affichée d’Excel pour forcer toutes les formules à tronquer et à arrondir les valeurs calculées en fonction des chiffres visibles.

    Pour activer cette option dans Excel 2013, 2010 et 2007, sélectionnez Fichier (ou l’Orbe Office), Options (ou Options Excel), Avancé. Dans la section Lors du calcul de ce classeur, cochez la case Définir la précision telle qu’elle est affichée. puis cliquez sur OK.

    Dans Excel 2003, 2002 et 2000, dans le menu Outils, sélectionnez Options, puis sous l'onglet Calcul, sous Options du classeur, cochez la case Précision telle qu'affichée, puis cliquez sur OK.

2
Rob

Comme vous le savez sûrement, les ordinateurs en interne ne fonctionnent qu'en utilisant des zéros et des uns (a.k.a. bits) et ont un nombre fixe de bits pour représenter une valeur (généralement 64 bits de nos jours). Cela signifie que le nombre de valeurs différentes pouvant être représentées est 2 à la puissance 64. C'est un nombre énorme, bien sûr, mais le nombre de possibles valeurs est fini, de sorte que tous les nombres ne peuvent pas être représentés. Lorsqu'il rencontre un nombre qu'il ne peut pas représenter exactement, il est automatiquement remplacé par le plus proche qu'il peut représenter. C'est ce que vous voyez.

0
Javier Alvarado