Calculatrice d’arrondi au centime
Résultat
Valeur arrondie
- Centimes
- 268
Arrondir un montant au centime près, c’est le ramener à deux décimales, les montants qui tombent exactement sur un demi-centime partant à l’écart de zéro : 2,675 devient 2,68 et 0,005 devient 0,01. C’est la dernière étape de presque tout calcul d’argent, parce qu’un prix multiplié par une quantité, ou un taux appliqué à un sous-total, ne tombe presque jamais sur un nombre entier de centimes. Le faire correctement est plus difficile qu’il n’y paraît. L’approche directe multiplie par 100, arrondit à un entier et divise à nouveau, et elle échoue précisément sur les montants qui comptent : 1,005 multiplié par 100 vaut 100,49999999999999 et non 100,5, donc le nombre s’arrondit à 1,00 et le dernier centime disparaît sans un mot. Afficher la valeur à deux décimales a le même défaut pour la même raison, puisqu’on regarde alors le même nombre légèrement trop petit. Aucun des deux échecs ne s’annonce. Le résultat est un montant d’apparence parfaitement ordinaire, et le seul moyen de s’en apercevoir est de savoir ce qu’il aurait dû être. Cette page évite le piège en déplaçant la virgule dans le texte plutôt qu’en multipliant, si bien que la décision est prise sur la valeur exacte. Elle donne aussi le montant sous forme de nombre entier de centimes, qui est la forme à conserver dès que l’on compte poursuivre l’arithmétique avec lui. Le résultat s’écrit comme votre langue écrit l’argent : un lecteur anglophone voit le même montant que vous, mais ponctué à l’anglaise, tandis qu’en français il s’écrit 1 234,57, avec une espace entre les milliers et une virgule avant les centimes. Deux montants qui ne diffèrent que du dernier centime reviennent comme deux nombres différents, et c’est tout l’intérêt de la page.
Quatre montants d’apparence ordinaire qui s’arrondissent du mauvais côté
| Montant | Arrondi | Centimes |
|---|---|---|
| 2.675 | 2.68 | 268 |
| 1.005 | 1.01 | 101 |
| 0.005 | 0.01 | 1 |
| -0.005 | -0.01 | -1 |
Chaque ligne est un montant qu’une implémentation directe rate, et chacune rate pour sa propre raison. 2,675 est l’exemple que tout le monde utilise et le seul cas où la mise à l’échelle par cent tombe juste par hasard, puisqu’il atterrit exactement sur 267,5 — c’est donc un mauvais échantillon et un bon avertissement, car un lecteur qui ne vérifie que cette ligne trouvera son propre code d’accord avec elle et conclura qu’il n’y a rien à corriger. 1,005 est le vrai échec : un centième n’a pas de forme binaire exacte, la mise à l’échelle donne 100,49999999999999 et les deux méthodes évidentes répondent 1,00. 0,005 est exactement un demi-centime et part à l’écart de zéro, ce qui sur un montant positif revient à monter. Et -0,005 est le même montant avec un signe, là où les deux règles se séparent : arrondir une moitié négative vers plus l’infini donne un zéro négatif, qui s’affiche -0,00. La troisième colonne court à côté pour que chaque ligne montre aussi les deux vues d’un même montant — le décimal à sa gauche, le nombre entier de centimes à sa droite, calculé à partir du montant arrondi pour que les deux ne puissent jamais se contredire. Les nombres sont repris tels quels : dans le tableau, le séparateur décimal est le point (2.675 plutôt que 2,675), parce que les valeurs viennent du calcul et non d’un texte.
Formule
2,675 -> 2,68; 1,005 -> 1,01; 0,005 -> 0,01; -0,005 -> -0,01; centimes = arrondi * 100
- valeur
- Le montant à arrondir, de moins un milliard à plus un milliard. Plus de deux décimales sont acceptées exprès : 1,005 et 2,675 sont exactement ce pour quoi cette page existe, et une saisie qui les refuserait écarterait les cas qu’elle est faite pour traiter. Le champ n’impose pas deux décimales, et il ne doit pas le faire — le sujet est la règle d’arrondi, pas le format de la saisie
- arrondi
- Le montant après arrondi à deux décimales, et la première ligne du résultat. C’est un nombre et non un texte, ce qui explique qu’il s’écrive avec le séparateur décimal et le groupement des milliers de votre langue : 1 234,57 en français. Cette différence avec la page d’arrondi général est volontaire, et c’est la seule qui apparaisse sur la même entrée
- centimes
- Le même montant exprimé en nombre entier de centimes, qui est une sortie distincte et non une seconde façon d’écrire la première. 268 est un entier avec lequel on peut additionner, répartir et compter ; 2,68 est un décimal qui redevient un nombre à virgule flottante dès qu’on le multiplie par quoi que ce soit. Il est calculé à partir du montant arrondi et non du montant d’origine, si bien que les deux lignes ne peuvent jamais se contredire — 1,005 donne 1,01 à côté de 101, jamais 1,01 à côté de 100
- demi à l’écart de zéro
- La règle pour les montants qui tombent exactement sur un demi-centime : 0,005 va à 0,01 et -0,005 va à -0,01. Arrondir vers le haut et arrondir à l’écart de zéro donnent le même résultat sur les montants positifs et diffèrent sur les négatifs, et c’est là que la distinction compte — la méthode naïve des entiers renvoie ici un zéro négatif, et -0,00 n’est pas quelque chose qu’on devrait montrer comme une somme due
- 1,005 * 100 = 100,49999999999999
- L’échec autour duquel cette page est construite. Un centième n’a pas de représentation binaire exacte, donc la mise à l’échelle par cent atterrit juste en dessous du point de partage et l’arrondi part du mauvais côté. Toute méthode qui multiplie d’abord, qu’elle arrondisse ensuite le nombre ou qu’elle l’affiche à deux décimales, hérite de cette erreur et répond 1,00. Déplacer la virgule dans le texte garde au contraire la valeur exacte, et la réponse devient 1,01
- -0,005 -> -0,01
- Le demi-centime négatif, et le cas où les deux règles d’arrondi se séparent. Le montant est exactement un demi-centime en dessous de zéro, et la règle l’éloigne de zéro plutôt que de le remonter, donc il devient -0,01 et non -0,00. Arrondir une moitié négative vers plus l’infini donne un zéro négatif, qui s’affiche -0,00 et se lit comme une erreur d’arrondi alors même que l’arithmétique était cohérente
Tout calcul qui se termine en argent se termine ici. Une addition partagée entre plusieurs personnes ne se divise presque jamais en centimes entiers, et le reste doit être attribué à quelqu’un ou arrondi; un taux de taxe ou de pourboire appliqué à un sous-total produit un montant à plus de décimales que l’argent n’en a; et un prix unitaire multiplié par une quantité fait de même. Arrondir à la fin est l’étape évidente, mais celle qui compte davantage est l’arrondi au milieu. Un tableau d’amortissement calcule les intérêts sur le capital restant à chaque échéance et arrondit les intérêts de chaque échéance au centime avant de les rajouter, parce qu’arrondir une seule fois à la fin laisse les parties fractionnaires s’accumuler — sur trois cent soixante échéances, cette dérive représente des unités entières, et le solde final cesse de correspondre à celui du prêteur. Le même raisonnement vaut partout où un total est assemblé à partir de parties arrondies : il faut arrondir les parties d’abord, puis les additionner, et non l’inverse. Le nombre de centimes est la forme à conserver pour ce genre de travail, puisqu’il reste un entier exact d’un bout à l’autre. Là où la question porte sur les décimales en général plutôt que sur l’argent — une mesure à trois décimales, un chiffre à deux chiffres significatifs —, la page d’arrondi couvre treize cibles en un seul endroit ; cette page-ci couvre la seule cible que l’argent utilise, et le fait avec une règle que l’arithmétique ne peut pas fausser.
Exemples détaillés
Le montant par défaut : 2,675
- Le montant se situe entre 2,67 et 2,68, et il tombe exactement à mi-chemin
- Une moitié part à l’écart de zéro, donc la réponse est 2,68 et non 2,67
- Multipliez le montant arrondi par 100 : 2,68 × 100 = 268
- La réponse est une somme de deux unités et soixante-huit centimes, soit 268 centimes
L’exemple vers lequel tout le monde se tourne, et la valeur par défaut ici pour cette raison. C’est aussi le seul cas où la méthode naïve tombe juste par hasard, puisque 2,675 multiplié par 100 tombe exactement sur 267,5 alors que 1,005 n’y arrive pas — si cet exemple était le seul de la page, un lecteur qui comparerait avec son propre code le trouverait d’accord avec lui et conclurait qu’il n’y a aucun problème à résoudre. L’exemple suivant est celui qui montre la différence, et c’est pourquoi la page affiche ce montant-ci à l’écran et garde l’autre pour plus bas.
Le montant qui prend tout le monde : 1,005
- Le montant tombe exactement à mi-chemin entre 1,00 et 1,01
- Une moitié part à l’écart de zéro, donc la réponse est 1,01
- La mise à l’échelle par cent donne 100,49999999999999 et non 100,5, parce qu’un centième n’a pas de forme binaire exacte
- Une méthode qui multiplie d’abord arrondit donc vers le bas et répond 1,00, en perdant un centime
- Déplacer la virgule dans le texte garde la valeur exacte, et c’est 1,01 qui sort
L’exemple pour lequel cette page existe. Multipliez-le par cent et vous obtenez 100,49999999999999 — pas un cheveu en dessous du point de partage par accident, mais parce que 1,005 n’est pas représentable exactement en binaire et que la valeur stockée est un cheveu en dessous. Les deux méthodes évidentes héritent de cette erreur : arrondir le nombre mis à l’échelle donne 1,00, et afficher la valeur à deux décimales donne 1,00 aussi, puisqu’elles regardent le même nombre légèrement trop petit. Rien dans le résultat n’a l’air faux. Un centime a simplement disparu, et le seul moyen de le repérer est de savoir ce que la réponse aurait dû être. Les montants à un demi-centime comme celui-ci sont exactement là où atterrissent les calculs d’argent, puisqu’un taux appliqué à un prix impair en produit en permanence.
Un montant ordinaire avec trop de décimales : 1234,5678
- Les deux premières décimales sont 56, et ce qui suit vaut 78 — plus d’un demi-centime
- La deuxième décimale monte donc : 1234,57
- Multipliez par 100 : 1 234,57 × 100 = 123 457
- Écrit en toutes lettres, le montant fait mille deux cent trente-quatre unités et cinquante-sept centimes
Le cas sans surprise, et il vaut un exemple pour que la page ne soit pas entièrement composée de pièges. Rien de délicat ne s’y produit : la troisième décimale est 7, le montant s’arrondit donc de façon ordinaire et les deux méthodes sont d’accord. Ce que ce cas montre, en revanche, c’est la mise en forme, et c’est la différence que le lecteur remarque en premier. En français le montant revient sous la forme 1 234,57 : une espace là où l’anglais met une virgule entre les milliers, et une virgule là où l’anglais met un point avant les centimes. L’allemand fait l’inverse de l’anglais sur les deux. Les chiffres sont identiques et la page n’y touche pas — ce qui change, c’est la façon dont votre langue écrit l’argent, et cette page la suit alors que la page d’arrondi général s’y refuse délibérément.
Un demi-centime sous zéro : -0,005
- Le montant tombe exactement à mi-chemin entre zéro et moins un centime
- Une moitié part à l’écart de zéro, ce qui veut dire ici vers le bas : -0,01
- Le multiplier par 100 donne exactement -0,5, donc celui-ci passe proprement à l’échelle
- Arrondir -0,5 à un entier de façon naïve donne un zéro négatif, qui s’affiche -0,00
- Déplacer la virgule dans le texte donne -1 centime, et -0,01 comme montant
Le cas qui sépare les deux règles d’arrondi. Sur les montants positifs, arrondir la moitié vers le haut et arrondir la moitié à l’écart de zéro donnent le même résultat, si bien que la distinction a l’air d’un détail byzantin. Ici elles se séparent : arrondir -0,5 vers le haut donne zéro avec un signe négatif attaché, et un montant de zéro centime négatif n’est pas quelque chose qu’on devrait montrer à quelqu’un. Celui-ci passe d’ailleurs proprement à l’échelle, puisque -0,005 multiplié par 100 vaut exactement -0,5 — l’échec binaire n’est pas symétrique par rapport au signe, et c’est pourquoi une série de montants de test a besoin de négatifs autant que de positifs. Un remboursement, un avoir ou une remise supérieure au montant arrivent tous ici.
Limites
Le montant doit être un nombre compris entre moins un milliard et plus un milliard, et le résultat arrondi peut se situer un cran en dehors de cette plage : 999 999 999,999 s’arrondit à un milliard pile, et le nombre de centimes correspondant atteint cent milliards. Les sorties restent exactes à cette taille, parce qu’un nombre entier de centimes de cette ampleur est encore à l’intérieur de la plage où les entiers sont représentés précisément. La règle d’arrondi est le demi à l’écart de zéro, et il n’existe aucun réglage pour la changer — une page avec un sélecteur de règle devrait expliquer quelle règle s’applique dans quel pays, et elle ne le fait pas. Les montants négatifs sont arrondis à l’écart de zéro, et non vers le haut, et les deux ne diffèrent que sur les cas de demi-centime exact. La page ne transporte aucune devise : elle sait combien de centimes un montant représente, mais pas comment ces centimes s’appellent, donc la sortie est un nombre et tout symbole est à vous d’ajouter. Elle arrondit un montant à la fois et ne répartit pas un total entre des personnes, n’attribue pas de reste et n’équilibre aucun échéancier. La table de référence plus bas montre quatre montants fixes au lieu de suivre votre saisie, et les nombres qui s’y trouvent sont imprimés sans localisation — point décimal, aucun groupement —, si bien qu’ils se lisent de la même façon dans toutes les langues, alors que le panneau de résultat au-dessus, lui, localise.
Questions fréquentes
- Pourquoi 1,005 s’arrondit-il à 1,01 et non à 1,00 ?
- Parce qu’il tombe exactement à mi-chemin entre 1,00 et 1,01, et que la règle du demi envoie le montant à l’écart de zéro. Cette réponse ne paraît surprenante que parce que les implémentations évidentes renvoient 1,00. Multipliez 1,005 par cent et vous obtenez 100,49999999999999, et non 100,5 — un centième ne se stocke pas exactement en binaire, et la valeur effectivement stockée est un cheveu en dessous de la vraie. Une méthode qui met à l’échelle d’abord, qu’elle arrondisse ensuite le nombre ou qu’elle l’affiche à deux décimales, regarde donc une valeur légèrement sous le point de partage et arrondit vers le bas. Le centime ne disparaît pas bruyamment : le résultat est un montant d’apparence ordinaire. Cette seule entrée justifie qu’il y ait une page ici plutôt qu’une formule d’une ligne.
- La règle est-elle le demi vers le haut ou le demi vers le pair ?
- Le demi à l’écart de zéro — vers le haut sur les montants positifs, vers le bas sur les négatifs. C’est ce que fait la quasi-totalité des systèmes de caisse et ce qu’une personne entend par arrondir un prix, donc 2,5 centimes devient 3 et -2,5 centimes devient -3. L’arrondi du demi vers le pair est l’autre règle courante, et elle existe pour empêcher de longues colonnes de nombres de dériver vers le haut quand on les additionne ; elle compte en statistique et dans certains travaux comptables, et ce n’est pas ce que fait cette page. Les deux règles s’accordent sur tous les montants sauf les moitiés exactes, ce qui explique que la différence passe facilement inaperçue jusqu’au jour où un versement tombe dessus. Il n’y a pas de sélecteur, parce qu’un sélecteur exigerait d’expliquer quelle règle s’applique à quel pays.
- Pourquoi donner aussi le nombre de centimes en plus du montant ?
- Parce que les deux servent à des choses différentes, et que c’est le nombre entier qui reste exact. Deux cent soixante-huit est un entier : on peut l’ajouter à d’autres centimes entiers, le répartir entre des personnes, le multiplier par une quantité et continuer sans que rien ne lui arrive. Deux virgule soixante-huit est un décimal, et dès qu’on le multiplie par quelque chose il redevient un nombre à virgule flottante avec le même problème de représentation que vous êtes venu éviter. C’est aussi pourquoi les centimes sont calculés à partir du montant déjà arrondi et non de la saisie d’origine — calculés séparément, une entrée comme 1,005 pourrait afficher 1,01 sur une ligne et 100 sur la suivante, et deux nombres qui se contredisent sur le même panneau, c’est pire que l’un ou l’autre légèrement faux.
- Pourquoi le résultat utilise-t-il une virgule dans certaines langues ?
- Parce que l’argent s’écrit comme la langue du lecteur l’écrit, et ce n’est pas la même partout. L’anglais place un point avant les centimes et des virgules entre les milliers ; l’allemand fait exactement l’inverse sur les deux. Le français met une espace là où l’anglais met la virgule de séparation des milliers, et garde la virgule avant les centimes, ce qui donne 1 234,57. La page renvoie le montant sous forme de nombre et non de texte, donc la mise en forme suit la langue dans laquelle vous lisez. La page d’arrondi général de ce site s’y refuse délibérément — son résultat est un texte avec un point fixe et sans groupement —, et c’est la seule chose sur laquelle les deux pages diffèrent vraiment pour une même entrée.
- Où l’arrondi au centime compte-t-il vraiment ?
- Partout où un total est assemblé à partir de parties. Un tableau d’amortissement est le cas le plus clair : les intérêts de chaque échéance sont calculés sur le capital restant, arrondis au centime puis rajoutés, et ne faire l’arrondi qu’une fois à la fin laisse les fractions restantes s’accumuler — sur trois cent soixante échéances, cette dérive représente des unités entières et le solde final cesse de correspondre à celui du prêteur. Le partage d’une addition a la même forme, puisqu’un total divisé entre plusieurs personnes tombe rarement sur des centimes entiers et que le centime impair doit aller quelque part. Et tout taux appliqué à un montant — taxe, pourboire, remise — produit plus de décimales que l’argent n’en a. La règle à retenir est que l’on arrondit les parties d’abord et qu’on additionne ensuite les parties arrondies, et non l’inverse.
- Quel est le montant le plus grand que la page accepte ?
- Un milliard, dans les deux sens, et la réponse arrondie est autorisée à se situer un cran en dehors — 999 999 999,999 s’arrondit à un milliard pile, et le nombre de centimes y atteint cent milliards. Les sorties restent exactes à cette taille parce qu’un nombre entier de centimes de cette ampleur est encore dans la plage où tout entier est représenté précisément ; le plafond est bien en dessous du point où les entiers commencent à être approximés. Les saisies au-delà de la borne sont refusées plutôt que ramenées de force, puisqu’arrondir en silence un montant qu’on n’a pas tapé serait une moins bonne réponse qu’un refus.
Références
- Rounding — the half-away-from-zero rule, and how it differs from rounding half upward on negative values — Wolfram MathWorld (United States)
- What Every Computer Scientist Should Know About Floating-Point Arithmetic — why 1.005 stored as a double is a hair below the half-way point — Oracle (originally ACM Computing Surveys)
- Number.prototype.toFixed — the round-half-to-even behaviour, and why formatting a value to two decimals is not the same as rounding it — MDN Web Docs (Mozilla)
- Virgule flottante — pourquoi 1,005 stocké en double précision vaut un cheveu de moins que le point de partage, et pourquoi la mise à l’échelle par 100 fait partir l’arrondi du mauvais côté — Wikipédia en français