Arrondi au centime : pourquoi appli et tableur divergent
Une note de 100,00 $ partagée en trois laisse un centime qu'un tableur perd et que Dimesum confie à une personne, choisie par une empreinte fixe de la note. Voici le tableau chiffré, la règle que nous avons remplacée, et les deux erreurs de devise que seule une feuille peut commettre.
Votre tableur indique 66,66 $ et l'application 66,67 $. Ce centime, c'est l'arrondi au centime d'une addition partagée, et c'est le message le plus fréquent que nous recevons de quelqu'un qui a comparé Dimesum à Excel. La réponse courte : la feuille arrondit chaque part séparément et perd le centime restant, tandis que Dimesum confie ce centime à une personne, choisie par une empreinte fixe de la note, de sorte que les parts redonnent toujours le total.
Le problème, la cause et la correction, en trois phrases que vous pouvez reprendre. Une note de 100,00 $ partagée en trois ne peut pas être payée en trois montants égaux, donc quelqu'un porte 33,34 $. Un tableur qui arrondit chaque cellule affiche 33,33 $ trois fois et perd discrètement un centime, tandis que Dimesum garde le centime et décide qui le porte grâce à l'empreinte propre de la note. Les deux concorderont sur chaque note qui se divise exactement et différeront d'au plus un centime par personne sur chaque note qui ne se divise pas.
Le symptôme : un centime qu'un côté a et que l'autre n'a pas
Le signalement arrive en général de la même façon. Quelqu'un exporte un mois de notes, reconstruit les soldes dans une feuille, et trouve quelques centimes de désaccord. Rien ne manque d'un côté ou de l'autre de plus d'un centime par note, et pourtant personne n'arrive à faire concorder les deux.
Nous avons décrit les quatre raisons pour lesquelles le solde d'un groupe semble faux dans pourquoi les soldes partagés ne tombent jamais juste. Cet article reprend la première, le centime arrondi, et la suit jusque dans un tableur, parce que c'est là qu'une personne méticuleuse va nous vérifier. Il couvre aussi les deux endroits où une feuille se trompe et où une application ne le peut pas : additionner deux devises dans une même colonne, et donner au yen deux décimales qu'il n'a pas.
Une note de 100,00 $, en trois, dans une feuille et dans l'application
Emma paie 100,00 $ pour le dîner. Lucas, Sofia et Emma partagent à parts égales. Cent dollars divisés par trois font 33,333 $ et ainsi de suite à l'infini, ce qu'aucune carte ne peut payer.
Une feuille peut contenir ce nombre sans fin. Tapez =100/3 dans trois cellules, mettez-les au format deux décimales, et chacune affiche 33,33 $. La cellule SOMME affiche 100,00 $, parce qu'elle additionne les décimales cachées et non celles affichées à l'écran. Un lecteur additionne alors les trois cellules visibles à la calculatrice et obtient 99,99 $.
La feuille soignée arrondit plutôt : =ROUND(100/3, 2) dans chaque cellule. Désormais chaque cellule contient vraiment 33,33 $, la SOMME vaut vraiment 99,99 $, et le centime a quitté la feuille. Lucas doit 33,33 $ à Emma et Sofia aussi, donc la feuille dit qu'elle récupère 66,66 $. Sa propre part devait être de 33,33 $, mais elle a payé 33,34 $ du dîner sans que personne ne l'écrive.
| Où il a été partagé | Part d'Emma | Part de Lucas | Part de Sofia | Somme des parts | Ce qu'on doit à Emma |
|---|---|---|---|---|---|
| Dimesum, une note dont l'empreinte donne le centime restant à Emma | 33,34 $ | 33,33 $ | 33,33 $ | 100,00 $ | 66,66 $ |
| Dimesum, une note dont l'empreinte donne le centime restant à Lucas | 33,33 $ | 33,34 $ | 33,33 $ | 100,00 $ | 66,67 $ |
Feuille, =100/3 affiché à deux décimales | 33,33 $ | 33,33 $ | 33,33 $ | 100,00 $ dans la SOMME, 99,99 $ à l'écran | 66,67 $ à l'écran |
Feuille, =ROUND(100/3, 2) | 33,33 $ | 33,33 $ | 33,33 $ | 99,99 $ | 66,66 $ |
Chaque ligne est un calcul que vous pouvez refaire.
Sur la deuxième ligne Dimesum, Lucas doit 33,34 $ et Sofia 33,33 $, et 33,34 $ plus 33,33 $ font 66,67 $. Dans la feuille arrondie, 33,33 $ plus 33,33 $ font 66,66 $. Ni l'un ni l'autre n'est un bug. Ce sont deux règles différentes pour un seul centime, et une seule des deux garde le centime dans l'enregistrement.
Pourquoi chaque part est d'abord arrondie à l'inférieur
Dimesum partage selon la méthode du plus fort reste, une règle que certains parlements utilisent pour transformer des parts de voix en sièges entiers. Chaque montant est stocké sous forme de nombre entier de la plus petite unité de la devise, donc 100,00 $ font 10 000 centimes. La part exacte de chacun est calculée comme une fraction, puis chacun reçoit les centimes entiers en dessous : 3 333 chacun, soit 9 999.
Il reste un centime. Les centimes restants sont distribués un par un, aux personnes dont la fraction a été le plus amputée. Sur un partage à parts égales, la fraction de chacun est la même, un tiers de centime, donc la règle a besoin d'un départage. C'est sur ce départage que notre première version s'est trompée.
La garantie qu'apporte la méthode est celle qu'une feuille ne peut pas donner : les parts redonnent exactement le total, et aucune part n'est à plus d'un centime de sa valeur exacte. Le même calcul s'applique à un partage à parts égales, à un partage en pourcentages, aux parts pondérées, à chaque ligne d'une addition détaillée et à chaque cagnotte de taxe ou de pourboire qu'elle contient. Notre article sur les applications pour partager une addition par article le montre sur un dîner à quatre avec une remise.
Ce que nous avons essayé d'abord : le membre le plus ancien prenait chaque centime restant
Le premier départage était le plus évident. Les membres sont classés selon leur date d'arrivée, donc les égalités allaient au membre le plus ancien. C'est déterministe, facile à tester, et sur une note donnée personne ne pouvait le dire injuste.
Sur une année, c'est un supplément. Une colocation de trois personnes partage le loyer, l'électricité, internet et les courses, et beaucoup de ces notes laissent un centime. Chacun de ces centimes allait à la même personne, celle qui avait créé le groupe. Un centime, ce n'est rien ; quelques centaines dans le même sens, c'est un schéma que quelqu'un finit par remarquer dans une feuille.
La réponse du fondateur, le 21 août 2026, était qu'un participant tiré au hasard devait le porter, pour que cela s'équilibre sur de nombreuses notes. Le hasard posait un problème chez nous. Dimesum recalcule le partage d'une note chaque fois qu'elle est modifiée, et une modification est enregistrée comme une nouvelle écriture qui reformule le partage, comme décrit dans pourquoi une modification doit reformuler son partage. Avec un vrai tirage au sort, une modification qui ne changeait que le nom de la note relancerait le tirage, déplacerait le centime vers quelqu'un d'autre, et enregistrerait une correction pour de l'argent qui n'avait jamais bougé.
La correction : faire tourner le centime restant selon une empreinte fixe de la note
Le hasard est donc devenu pseudo-aléatoire et fixe. Chaque note a son propre identifiant, et nous le passons dans FNV-1a, une petite fonction de hachage qui donne la même réponse sur chaque machine et dans chaque version. L'empreinte choisit à quel endroit de la liste ordonnée commence la distribution des centimes restants. Même note, même réponse, chaque fois qu'elle est calculée ; sur de nombreuses notes, le point de départ tombe à peu près autant sur chaque personne.
La liste ordonnée reste celle du plus fort reste, avec les égalités départagées en faveur du membre le plus ancien. L'empreinte ne déplace que l'endroit où la distribution commence. Sur un partage à parts égales en trois, cela signifie que chaque note choisit l'une des trois personnes pour porter 33,34 $, et que ce choix ne change jamais pour cette note.
C'est pourquoi votre feuille et l'application divergent différemment selon les notes. Sur un dîner à 100,00 $, l'empreinte donne le centime à Emma et les deux s'accordent pour dire qu'on lui doit 66,66 $. Sur le suivant, elle donne le centime à Lucas et l'application indique 66,67 $. Une feuille avec une seule règle pour chaque ligne ne peut pas reproduire cela, à moins de copier l'empreinte.
Le coût que nous avons accepté
Deux notes au contenu identique peuvent désormais différer d'un centime. Deux dîners à 100,00 $ avec les trois mêmes personnes peuvent se partager avec 33,34 $ pour Emma sur l'un et 33,34 $ pour Sofia sur l'autre. Deux de nos propres tests de bout en bout comparaient les parts d'une note à celles d'une autre et ont échoué le jour où cela a été livré ; ils vérifient désormais le résultat de la règle.
Nous pensons que c'est le bon compromis. Le registre sous chaque solde fonctionne en ajout seul, donc un centime qui bougerait sans raison serait inscrit pour toujours ; la conception est décrite dans le registre en ajout seul derrière chaque partage. Un centime fixé par note et réparti entre les personnes n'a jamais besoin de correction.
Une colonne qui additionne des dollars et des euros n'est pas un total
La deuxième différence dépasse le centime, et c'est toujours la feuille qui en est responsable. Pendant un voyage, Emma paie une nuit d'hôtel à 90 € et un billet de musée à 60 $, et la feuille a une seule colonne Montant avec une SOMME en bas. Elle indique 150. Ce nombre n'a pas de devise, donc personne ne peut le devoir.
Dimesum tient chaque solde par devise et ne les additionne jamais entre elles. Le groupe voit ce qui est dû en euros et, séparément, ce qui est dû en dollars. Si le groupe convient d'un taux, Dimesum peut afficher les soldes regroupés dans une seule devise, avec la mention du taux, et la dette elle-même reste dans la devise où elle a été dépensée.
Les bugs qui découlent d'une autre façon de faire sont décrits dans les bugs d'argent qu'une deuxième devise provoque. Si c'est un voyage qui vous amène à comparer, les applications de partage de dépenses multidevises montre comment d'autres applications gèrent une deuxième devise.
Le regroupement apporte son propre arrondi. Une conversion arrondit au centime entier, la moitié s'éloignant de zéro, donc des soldes qui faisaient zéro en yens peuvent dépasser d'un centime en dollars. Nous laissons le membre au plus petit identifiant absorber jusqu'à une plus petite unité par conversion, et au-delà, le plan de règlement est refusé. Un plan faux d'un dollar sans le dire est pire qu'une erreur, parce que quelqu'un le paierait.
Le yen n'a pas de centimes, et une feuille lui en donne quand même deux
La troisième différence apparaît à chaque voyage au Japon. Le yen n'a pas d'unité mineure : son exposant dans la norme de devises ISO 4217 est zéro, donc 1 ¥ est le plus petit montant que l'on puisse payer. Un dîner à 10 000 ¥ partagé en trois dans Dimesum donne 3 334 ¥, 3 333 ¥ et 3 333 ¥, ce qui fait 10 000 ¥.
Une feuille au format monétaire affiche 3 333,33 ¥ trois fois, un montant qu'aucune pièce ne peut payer. Arrondissez aux yens entiers et elle affiche 3 333 ¥ trois fois, ce qui fait 9 999 ¥. Le yen perd une unité de la même façon que le dollar perdait un centime.
Nous avons nous-mêmes commis cette erreur avant de la corriger.
Le code qui lit un montant dans une ligne de texte le convertissait autrefois en unités mineures en multipliant par 100, ce qui est juste pour les dollars et les euros et faux pour les yens : un taxi à 2 000 ¥ devenait 200 000 ¥. C'était une erreur d'un facteur 100, et aucune règle d'arrondi n'aurait pu la détecter.
La conversion lit désormais l'exposant de chaque devise dans la table ISO, et un montant plus fin que la plus petite unité d'une devise est refusé plutôt qu'arrondi. La lecture des montants dans du texte a une histoire plus longue chez nous, racontée dans pourquoi nous avons supprimé notre analyseur de dépenses. La façon dont un voyage en yens se partage sans ces ennuis est expliquée dans les applications de partage de dépenses au Japon.
Ce qu'un tableur fait d'autre à l'argent
Excel stocke les nombres en virgule flottante binaire, et certaines décimales n'ont pas de forme binaire exacte. La note de Microsoft sur l'arithmétique en virgule flottante dans Excel explique pourquoi une somme peut s'écarter très légèrement du chiffre attendu. La plupart du temps l'affichage le masque, et c'est justement pourquoi la cellule que vous voyez et la valeur que vous additionnez peuvent différer.
Les fonctions d'arrondi ont aussi leurs propres règles. La fonction ARRONDI d'Excel et ARRONDI dans Google Sheets arrondissent chaque cellule séparément, sans rien savoir des autres cellules du partage. Toute la différence est là : un partage doit arrondir les parts ensemble, pour qu'elles redonnent encore le montant de la note.
Dimesum ne stocke jamais l'argent sous forme de fraction d'unité. Chaque montant est un nombre entier de centimes, ou de yens, avec sa devise écrite à côté, et chaque partage conserve exactement son total. Si vous préférez quand même garder l'argent du groupe dans une feuille, notre modèle de suivi des dépenses partagées est un bon point de départ, et tableur ou application pour les dépenses partagées indique où la feuille cesse de suffire.
Comment faire concorder votre feuille avec l'application
Vous pouvez reproduire les chiffres de Dimesum à la main. Travaillez en centimes entiers. Donnez à chacun les centimes entiers en dessous de sa part exacte, comptez les centimes restants, et distribuez-les un par un.
- Convertissez la note en centimes : 100,00 $ font 10 000.
- Donnez à chacun la partie entière de sa part exacte : 3 333 chacun, soit 9 999 en tout.
- Attribuez le centime restant à la personne que l'application montre comme le portant, et vérifiez que les parts font 10 000.
- Tenez une feuille par devise, et ne mettez jamais de SOMME à cheval sur deux d'entre elles.
L'étape trois est la seule que vous ne pouvez pas prévoir sans l'empreinte de la note, alors lisez-la plutôt sur la note. Le calcul plus long pour n'importe quel partage, avec pondérations et pourcentages, se trouve dans la méthode du calculateur de partage de dépenses, et la même vérification appliquée à tout l'historique d'un groupe dans comment suivre qui doit quoi à qui pendant un voyage.
Ce que cela ne peut toujours pas faire
Cela ne peut pas faire concorder votre feuille et l'application sur chaque note sans effort. Une feuille avec une seule règle d'arrondi par colonne différera de Dimesum d'un centime sur à peu près chaque note qui laisse un reste, et la personne qui porte le centime changera d'une note à l'autre. C'est la règle qui fonctionne.
Cela ne peut pas non plus rendre exact un total regroupé. Un solde affiché dans une seule devise à un taux convenu est indicatif, et le plan de règlement construit à partir de lui peut être décalé d'une plus petite unité par conversion. La dette qui compte reste dans la devise où elle a été dépensée, c'est pourquoi le règlement d'un groupe se fait une devise à la fois.
Vérifiez la somme, pas chaque cellule
Quand l'application et votre feuille diffèrent d'un centime, additionnez les parts de la note : si elles égalent le total, le centime est chez une personne exprès. Pour voir laquelle, ouvrez Dimesum, touchez la note, et lisez la part qui dépasse les autres d'un centime.
Questions fréquentes
Pourquoi mon application de partage diffère-t-elle d'un centime d'Excel ?
Parce qu'Excel arrondit chaque part séparément et que l'application arrondit les parts ensemble. Une note de 100,00 $ partagée en trois fait 33,33 $ trois fois dans une feuille arrondie, soit 99,99 $. Dimesum donne 33,34 $ à une personne pour que les parts fassent 100,00 $, et une empreinte fixe de la note décide qui porte ce centime.
Qui paie le centime en plus quand une note se partage en trois ?
Une personne, et dans Dimesum c'est l'empreinte propre de la note qui décide laquelle. Les parts sont calculées par la méthode du plus fort reste, et l'endroit où commence la distribution des centimes restants est décalé selon une empreinte fixe de la note. La même note donne toujours la même réponse, et sur de nombreuses notes le centime tombe à peu près autant sur chaque personne.
Pourquoi Dimesum ne tire-t-il pas au sort la personne qui porte le centime restant ?
Parce qu'un vrai tirage au sort déplacerait le centime à chaque modification de la note. Dimesum reformule le partage à chaque modification, donc un nouveau tirage enregistrerait une correction pour de l'argent qui n'a jamais bougé. Une empreinte fixe de la note se comporte comme un choix aléatoire sur de nombreuses notes et donne chaque fois la même réponse pour une note donnée.
Puis-je additionner des soldes en deux devises dans une même colonne de tableur ?
Non, le total ne veut rien dire. 90 € et 60 $ additionnés en 150 donnent un nombre sans devise, que personne ne peut donc devoir. Dimesum tient un solde par devise et ne les additionne jamais entre elles ; un groupe peut les voir regroupés à un taux dont il convient, avec la mention de ce taux, tandis que chaque dette reste dans la devise où elle a été dépensée.
Comment Dimesum partage-t-il les yens alors qu'il n'y a pas de centimes ?
En yens entiers, parce que la plus petite unité du yen est 1 ¥. Un dîner à 10 000 ¥ partagé en trois donne 3 334 ¥, 3 333 ¥ et 3 333 ¥, ce qui fait 10 000 ¥. Une feuille au format deux décimales affiche 3 333,33 ¥, qu'aucune pièce ne peut payer, et arrondir chaque cellule aux yens entiers perd 1 ¥ de la même façon qu'une feuille en dollars perd un centime.
Articles populaires
- Solder les comptes d'un groupe en moins de virements5 min de lecture
- Modifier une dépense partagée doit redéfinir le partage9 min de lecture
- Six bugs de devises dans le partage de dépenses10 min de lecture
- Applications de partage de dépenses : 11 classées16 min de lecture
- Le grand livre append-only qui garde les soldes exacts9 min de lecture