Startseite / Blog / Technik
TechnikRundung beim Rechnungsteilen: warum App und Excel abweichen
Eine Rechnung über 100,00 $, durch drei geteilt, lässt einen Cent übrig, den eine Tabelle fallen lässt und den Dimesum einer Person gibt, gewählt durch einen festen Hash der Rechnung. Hier sind die durchgerechnete Tabelle, die Regel, die wir ersetzt haben, und die zwei Währungsfehler, die nur eine Tabelle machen kann.
Ihre Tabelle sagt 66,66 $, und die App sagt 66,67 $. Dieser eine Cent ist die Rundung beim Rechnungsteilen, und er ist die häufigste Nachricht, die wir von jemandem bekommen, der Dimesum mit Excel verglichen hat. Die kurze Antwort: die Tabelle rundet jeden Anteil für sich und verliert den übrigen Cent, während Dimesum diesen Cent einer Person gibt, gewählt durch einen festen Hash der Rechnung, sodass die Anteile immer wieder die Summe ergeben.
Das Problem, die Ursache und die Lösung, in drei Sätzen zum Mitnehmen. Eine Rechnung über 100,00 $, durch drei geteilt, lässt sich nicht in drei gleichen Beträgen bezahlen, also trägt jemand 33,34 $. Eine Tabelle, die jede Zelle rundet, zeigt dreimal 33,33 $ und lässt still einen Cent fallen, während Dimesum den Cent behält und durch den eigenen Hash der Rechnung entscheidet, wer ihn trägt. Die beiden stimmen bei jeder Rechnung überein, die sich glatt teilen lässt, und weichen bei jeder anderen um höchstens einen Cent pro Person ab.
Das Symptom: ein Cent, den eine Seite hat und die andere nicht
Die Meldung kommt meist auf dieselbe Weise. Jemand exportiert einen Monat an Rechnungen, baut die Salden in einer Tabelle nach und findet ein paar Cent Abweichung. Auf keiner Seite fehlt mehr als ein Cent pro Rechnung, und doch schafft es niemand, die beiden in Einklang zu bringen.
Über die vier Gründe, warum ein Gruppensaldo falsch aussieht, haben wir in warum geteilte Salden nicht aufgehen geschrieben. Dieser Beitrag nimmt den ersten davon, den gerundeten Cent, und folgt ihm in eine Tabelle, denn dorthin geht ein sorgfältiger Mensch, um uns zu prüfen. Er behandelt außerdem die zwei Stellen, an denen eine Tabelle schiefgeht, an denen eine App es nicht kann: zwei Währungen in einer Spalte addieren und dem Yen zwei Dezimalstellen geben, die er nicht hat.
Eine Rechnung über 100,00 $, durch drei, in einer Tabelle und in der App
Emma zahlt 100,00 $ für ein Abendessen. Lucas, Sofia und Emma teilen es gleichmäßig. Hundert Dollar geteilt durch drei sind 33,333 $ und so weiter bis in alle Ewigkeit, was keine Karte bezahlen kann.
Eine Tabelle kann diese endlose Zahl halten. Tippen Sie =100/3 in drei Zellen, formatieren Sie sie auf zwei Dezimalstellen, und jede zeigt 33,33 $. Die SUMME-Zelle zeigt 100,00 $, weil sie die verborgenen Stellen addiert statt der auf dem Bildschirm. Jetzt addiert jemand die drei sichtbaren Zellen mit einem Taschenrechner und erhält 99,99 $.
Die sorgfältige Tabelle rundet stattdessen: =ROUND(100/3, 2) in jeder Zelle. Jetzt enthält jede Zelle wirklich 33,33 $, die SUMME ist wirklich 99,99 $, und der Cent hat die Tabelle verlassen. Lucas schuldet Emma 33,33 $ und Sofia 33,33 $, also sagt die Tabelle, dass sie 66,66 $ zurückbekommt. Ihr eigener Anteil sollte 33,33 $ betragen, aber sie hat 33,34 $ des Abendessens bezahlt, ohne dass es jemand aufgeschrieben hat.
| Wo es geteilt wurde | Emmas Anteil | Anteil von Lucas | Sofias Anteil | Anteile ergeben | Emma stehen zu |
|---|---|---|---|---|---|
| Dimesum, eine Rechnung, deren Hash Emma den übrigen Cent gibt | 33,34 $ | 33,33 $ | 33,33 $ | 100,00 $ | 66,66 $ |
| Dimesum, eine Rechnung, deren Hash Lucas den übrigen Cent gibt | 33,33 $ | 33,34 $ | 33,33 $ | 100,00 $ | 66,67 $ |
Tabelle, =100/3 mit zwei Stellen angezeigt | 33,33 $ | 33,33 $ | 33,33 $ | 100,00 $ in der SUMME, 99,99 $ auf dem Bildschirm | 66,67 $ auf dem Bildschirm |
Tabelle, =ROUND(100/3, 2) | 33,33 $ | 33,33 $ | 33,33 $ | 99,99 $ | 66,66 $ |
Jede Zeile ist eine Rechnung, die Sie nachvollziehen können.
In der zweiten Zeile von Dimesum schuldet Lucas 33,34 $ und Sofia 33,33 $, und 33,34 $ plus 33,33 $ sind 66,67 $. In der gerundeten Tabelle sind 33,33 $ plus 33,33 $ dann 66,66 $. Keines davon ist ein Fehler. Es sind zwei verschiedene Regeln für einen Cent, und nur eine davon behält den Cent in der Aufzeichnung.
Warum jeder Anteil zuerst abgerundet wird
Dimesum teilt mit dem Verfahren des größten Rests, einer Regel, mit der manche Parlamente Stimmenanteile in ganze Sitze verwandeln. Jeder Betrag wird als ganze Zahl der kleinsten Einheit der Währung gespeichert, also sind 100,00 $ dann 10.000 Cent. Der exakte Anteil jeder Person wird als Bruch ermittelt, dann bekommt jede Person die ganzen Cent darunter: jeweils 3.333, zusammen 9.999.
Damit bleibt ein Cent übrig. Die übrigen Cent werden einer nach dem anderen an die Personen verteilt, deren Brüche am stärksten gekürzt wurden. Bei einer gleichmäßigen Aufteilung ist der Bruch aller gleich, ein Drittel Cent, also braucht die Regel einen Stichentscheid. An diesem Stichentscheid ging unsere erste Fassung schief.
Die Garantie, die das Verfahren gibt, ist die, die eine Tabelle nicht geben kann: die Anteile ergeben genau wieder die Summe, und kein Anteil liegt mehr als einen Cent von seinem exakten Wert entfernt. Dieselbe Rechnung läuft für eine gleichmäßige Aufteilung, eine Aufteilung nach Prozent, gewichtete Anteile, jede Zeile einer aufgeschlüsselten Rechnung und jeden Topf für Steuer oder Trinkgeld darauf. Unser Beitrag über Apps, die eine Rechnung nach Posten teilen zeigt es an einem Abendessen zu viert mit einem Rabatt.
Was wir zuerst versucht haben: das älteste Mitglied nahm jeden übrigen Cent
Der erste Stichentscheid war der naheliegende. Mitglieder sind danach geordnet, wann sie beigetreten sind, also gingen Gleichstände an das älteste Mitglied. Das ist deterministisch, leicht zu testen, und bei keiner einzelnen Rechnung könnte es jemand unfair nennen.
Über ein Jahr ist es ein Aufschlag. Eine Wohnung mit drei Personen teilt Miete, Strom, Internet und Einkäufe, und viele dieser Rechnungen lassen einen Cent übrig. Jeder dieser Cent ging an dieselbe Person, die, die die Gruppe eingerichtet hat. Ein Cent ist nichts; ein paar hundert davon in eine Richtung sind ein Muster, das irgendwann jemand in einer Tabelle bemerkt.
Die Antwort des Gründers am 21. August 2026 war, dass eine zufällige beteiligte Person ihn tragen sollte, damit es sich über viele Rechnungen ausgleicht. Zufall hatte für uns einen Haken. Dimesum berechnet die Aufteilung einer Rechnung neu, wann immer sie bearbeitet wird, und eine Bearbeitung wird als neuer Eintrag festgehalten, der die Aufteilung neu ausweist, wie in warum eine Bearbeitung ihre Aufteilung neu ausweisen muss beschrieben. Mit einer echten Zufallsziehung würde eine Bearbeitung, die nur den Namen der Rechnung ändert, neu würfeln, den Cent zu jemand anderem verschieben und eine Korrektur für Geld buchen, das sich nie bewegt hat.
Die Lösung: den übrigen Cent mit einem festen Hash der Rechnung rotieren
Also wurde aus zufällig pseudozufällig und fest. Jede Rechnung hat ihre eigene ID, und wir hashen sie mit FNV-1a, einem kleinen Hash, der auf jeder Maschine und in jedem Build dieselbe Antwort gibt. Der Hash wählt, an welcher Stelle der geordneten Liste die übrigen Cent beginnen. Dieselbe Rechnung, dieselbe Antwort, jedes Mal, wenn sie berechnet wird; über viele Rechnungen landet der Startpunkt etwa gleich oft bei jeder Person.
Die geordnete Liste ist weiterhin die Reihenfolge des größten Rests, mit Gleichständen zugunsten des ältesten Mitglieds. Der Hash verschiebt nur, wo die Verteilung beginnt. Bei einer gleichmäßigen Aufteilung durch drei heißt das, dass jede Rechnung eine der drei Personen wählt, die 33,34 $ trägt, und diese Wahl ändert sich für diese Rechnung nie.
Deshalb weichen Ihre Tabelle und die App bei verschiedenen Rechnungen unterschiedlich voneinander ab. Bei einem Abendessen über 100,00 $ gibt der Hash Emma den Cent, und beide sind sich einig, dass ihr 66,66 $ zustehen. Beim nächsten gibt er Lucas den Cent, und die App sagt 66,67 $. Eine Tabelle mit einer Regel für jede Zeile kann das nicht nachbilden, es sei denn, sie übernimmt den Hash.
Der Preis, den wir in Kauf genommen haben
Zwei Rechnungen mit identischem Inhalt können sich jetzt um einen Cent unterscheiden. Zwei Abendessen über 100,00 $ mit denselben drei Personen können als 33,34 $ für Emma bei dem einen und 33,34 $ für Sofia bei dem anderen geteilt werden. Zwei unserer eigenen Ende-zu-Ende-Tests verglichen die Anteile einer Rechnung mit denen einer anderen und brachen an dem Tag, an dem das ausgeliefert wurde; sie prüfen jetzt stattdessen das Ergebnis der Regel.
Wir halten das für den richtigen Tausch. Das Konto unter jedem Saldo ist nur anfügend, also würde ein Cent, der sich ohne Grund bewegt, für immer festgehalten; das Design steht in das nur anfügende Konto hinter jeder Aufteilung. Ein Cent, der pro Rechnung fest ist und über Personen verteilt wird, braucht nie eine Korrektur.
Eine Spalte, die Dollar zu Euro addiert, ist keine Summe
Der zweite Unterschied ist größer als ein Cent, und er liegt immer bei der Tabelle. Auf einer Reise zahlt Emma eine Hotelnacht für 90 € und ein Museumsticket für 60 $, und die Tabelle hat eine Spalte „Betrag“ mit einer SUMME darunter. Sie sagt 150. Diese Zahl hat keine Währung, also kann sie niemand schulden.
Dimesum führt jeden Saldo je Währung und addiert nie über Währungen hinweg. Die Gruppe sieht, was in Euro geschuldet wird, und getrennt davon, was in Dollar geschuldet wird. Wenn sich die Gruppe auf einen Kurs einigt, kann Dimesum die Salden in eine Währung zusammengefasst zeigen, beschriftet mit dem Kurs, und die Schuld selbst bleibt in der Währung, in der sie ausgegeben wurde.
Die Fehler, die entstehen, wenn man es anders macht, stehen in die Geldfehler, die eine zweite Währung verursacht. Wenn eine Reise der Grund für Ihren Vergleich ist, stellt Apps zum Teilen von Ausgaben in mehreren Währungen nebeneinander, wie andere Apps eine zweite Währung halten.
Das Zusammenfassen bringt eine eigene Rundung zurück. Eine Umrechnung rundet auf ganze Cent, kaufmännisch von null weg, also können Salden, die in Yen null ergaben, in Dollar einen Cent darüber ergeben. Wir lassen die niedrigste Mitglieds-ID bis zu einer kleinsten Einheit pro Umrechnung aufnehmen, und darüber hinaus wird der Plan zum Ausgleich abgelehnt. Ein Plan, der still um 1 $ falsch ist, ist schlimmer als ein Fehler, denn jemand würde ihn bezahlen.
Der Yen hat keine Cent, und eine Tabelle gibt ihm trotzdem zwei
Der dritte Unterschied taucht auf jeder Reise nach Japan auf. Der Yen hat keine Untereinheit: sein Exponent im Währungsstandard ISO 4217 ist null, also ist 1 ¥ der kleinste Betrag, den irgendjemand zahlen kann. Ein Abendessen für 10.000 ¥, in Dimesum durch drei geteilt, ergibt 3.334 ¥, 3.333 ¥ und 3.333 ¥, zusammen 10.000 ¥.
Eine für Geld formatierte Tabelle zeigt dreimal 3.333,33 ¥, eine Zahl, die keine Münze bezahlt. Runden Sie auf ganze Yen, und sie zeigt dreimal 3.333 ¥, zusammen 9.999 ¥. Der Yen verliert eine Einheit auf dieselbe Weise, wie der Dollar einen Cent verloren hat.
Wir haben das selbst kaputt gemacht, bevor wir es repariert haben.
Der Code, der einen Betrag aus einer Textzeile liest, hat ihn einmal in Untereinheiten umgewandelt, indem er mit 100 multiplizierte, was für Dollar und Euro richtig ist und für Yen falsch: ein Taxi für 2.000 ¥ wurde zu 200.000 ¥. Das war ein Fehler um das 100-Fache, und keine Rundungsregel hätte ihn auffangen können.
Die Umrechnung liest jetzt den Exponenten jeder Währung aus der ISO-Tabelle, und eine Zahl, die feiner ist als die kleinste Einheit einer Währung, wird abgelehnt statt gerundet. Das Auslesen von Beträgen aus Text hat bei uns eine längere Geschichte, erzählt in warum wir unseren Ausgaben-Parser gelöscht haben. Wie eine Reise in Yen ohne diesen Ärger geteilt wird, steht in Apps zum Rechnungen teilen in Japan.
Was eine Tabelle sonst noch mit Geld macht
Excel speichert Zahlen als binäre Gleitkommazahlen, und manche Dezimalzahlen haben keine exakte binäre Form. Die eigene Notiz von Microsoft zur Gleitkommaarithmetik in Excel erklärt, warum eine Summe um ein Haar von der erwarteten Zahl abweichen kann. Meist verdeckt die Anzeige das, und genau deshalb können die Zelle, die Sie sehen, und der Wert, den Sie addieren, voneinander abweichen.
Die Rundungsfunktionen haben ebenfalls ihre eigenen Regeln. Die Funktion RUNDEN in Excel und RUNDEN in Google Tabellen runden jede Zelle für sich, ohne Wissen über die anderen Zellen der Aufteilung. Das ist der ganze Unterschied: eine Aufteilung muss die Anteile gemeinsam runden, damit sie weiterhin die Rechnung ergeben.
Dimesum speichert Geld nie als Bruchteil einer Einheit. Jeder Betrag ist eine ganze Zahl von Cent, oder von Yen, mit der Währung daneben, und jede Aufteilung erhält ihre Summe exakt. Wenn Sie das Geld der Gruppe trotzdem lieber in einer Tabelle führen, ist unsere Vorlage für geteilte Ausgaben ein fairer Anfang, und Tabelle oder App für geteilte Ausgaben behandelt, wo die Tabelle nicht mehr genügt.
Wie Sie Ihre Tabelle mit der App in Einklang bringen
Sie können die Zahlen von Dimesum von Hand nachbilden. Arbeiten Sie in ganzen Cent. Geben Sie jeder Person die ganzen Cent unter ihrem exakten Anteil, zählen Sie die übrigen Cent und verteilen Sie sie einen nach dem anderen.
- Rechnen Sie die Rechnung in Cent um: 100,00 $ sind 10.000.
- Geben Sie jeder Person die abgerundete Zahl ihres exakten Anteils: jeweils 3.333, zusammen 9.999.
- Geben Sie den übrigen Cent der Person, die ihn laut App trägt, und prüfen Sie, ob die Anteile 10.000 ergeben.
- Führen Sie eine Tabelle pro Währung, und setzen Sie nie eine SUMME über zwei davon.
Schritt drei ist der einzige, den Sie ohne den Hash der Rechnung nicht vorhersagen können, also lesen Sie ihn stattdessen von der Rechnung ab. Die längere Rechnung für jede Aufteilung, mit Gewichten und Prozenten, steht in der Methode für einen Rechner zum Teilen von Ausgaben, und dieselbe Prüfung, angewendet auf den ganzen Verlauf einer Gruppe, steht in wie man auf einer Reise festhält, wer wem was schuldet.
Was das immer noch nicht kann
Es kann Ihre Tabelle und die App nicht ohne Aufwand bei jeder Rechnung in Einklang bringen. Eine Tabelle mit einer Rundungsregel pro Spalte weicht bei ungefähr jeder Rechnung, die einen Rest lässt, um einen Cent von Dimesum ab, und die Person, die den Cent trägt, wechselt von Rechnung zu Rechnung. Das ist die Regel, die funktioniert.
Es kann auch eine zusammengefasste Summe nicht exakt machen. Ein Saldo, der zu einem vereinbarten Kurs in einer Währung gezeigt wird, ist eine Orientierung, und der daraus gebaute Plan zum Ausgleich kann pro Umrechnung um eine kleinste Einheit danebenliegen. Die Schuld, die zählt, bleibt in der Währung, in der sie ausgegeben wurde, weshalb der Ausgleich einer Gruppe eine Währung nach der anderen geschieht.
Prüfen Sie die Summe, nicht jede Zelle
Wenn die App und Ihre Tabelle um einen Cent abweichen, addieren Sie die Anteile auf der Rechnung: wenn sie die Summe ergeben, liegt der Cent absichtlich bei einer Person. Um zu sehen, bei welcher, öffnen Sie Dimesum, tippen Sie auf die Rechnung und lesen Sie den Anteil ab, der einen Cent größer ist als die anderen.
Häufige Fragen
Warum weicht meine App zum Rechnungen teilen um einen Cent von Excel ab?
Weil Excel jeden Anteil für sich rundet und die App die Anteile gemeinsam rundet. Eine Rechnung über 100,00 $, durch drei geteilt, ist in einer gerundeten Tabelle dreimal 33,33 $, was 99,99 $ ergibt. Dimesum gibt einer Person 33,34 $, damit die Anteile 100,00 $ ergeben, und ein fester Hash der Rechnung entscheidet, wer diesen Cent trägt.
Wer zahlt den zusätzlichen Cent, wenn eine Rechnung durch drei geteilt wird?
Eine Person, und in Dimesum entscheidet der eigene Hash der Rechnung, welche. Die Anteile werden nach dem Verfahren des größten Rests ermittelt, und die Stelle, an der die übrigen Cent beginnen, wird durch einen festen Hash der Rechnung verschoben. Dieselbe Rechnung gibt immer dieselbe Antwort, und über viele Rechnungen landet der Cent etwa gleich oft bei jeder Person.
Warum wählt Dimesum für den übrigen Cent keine zufällige Person?
Weil eine echte Zufallsziehung den Cent bei jeder Bearbeitung einer Rechnung verschieben würde. Dimesum weist die Aufteilung bei jeder Bearbeitung neu aus, also würde eine neue Ziehung eine Korrektur für Geld buchen, das sich nie bewegt hat. Ein fester Hash der Rechnung verhält sich über viele Rechnungen wie eine zufällige Wahl und gibt für eine Rechnung jedes Mal dieselbe Antwort.
Kann ich Salden in zwei Währungen in einer Tabellenspalte addieren?
Nein, die Summe bedeutet nichts. 90 € und 60 $ zu 150 addiert ergeben eine Zahl ohne Währung, also kann sie niemand schulden. Dimesum führt einen Saldo je Währung und addiert nie über Währungen hinweg; eine Gruppe kann sie zusammengefasst zu einem Kurs sehen, auf den sie sich einigt, beschriftet mit diesem Kurs, während jede Schuld in der Währung bleibt, in der sie ausgegeben wurde.
Wie teilt Dimesum Yen, wenn es keine Cent gibt?
In ganzen Yen, denn die kleinste Einheit des Yen ist 1 ¥. Ein Abendessen für 10.000 ¥, durch drei geteilt, ergibt 3.334 ¥, 3.333 ¥ und 3.333 ¥, zusammen 10.000 ¥. Eine Tabelle mit zwei Dezimalstellen zeigt 3.333,33 ¥, was keine Münze bezahlen kann, und jede Zelle auf ganze Yen zu runden verliert 1 ¥ auf dieselbe Weise, wie eine Dollar-Tabelle einen Cent verliert.
Beliebte Beiträge
- Abrechnen: Gruppenausgaben mit wenigen Überweisungen5 Min. Lesezeit
- Warum das Ändern einer Ausgabe die Aufteilung neu setzt8 Min. Lesezeit
- Sechs Geldfehler bei Ausgaben in mehreren Währungen8 Min. Lesezeit
- Rechnungen teilen: 11 Apps im Ranking14 Min. Lesezeit
- Append-only-Ledger für geteilte Ausgaben8 Min. Lesezeit