Web-Anwendung in PHP mit einer MySQL-Datenbank codiert.Korrekte Summen mit Trennsummen, um Rundungsfehlern entgegenzuwirken
Ich habe ein System, das unterschiedliche Kosten für eine Anzahl von Leuten berechnet, wenn man Kosten aufteilt. Zum Beispiel Person A kauft etwas für 10 und Personen B, C und D sollten die Kosten aufteilen.
Das System sollte eine positive Datensatz für Person A von 10 und negativen Datensätze von 10/3 für B, C und D,
jedoch dafür registrieren, wenn dies durchgeführt wird; B, C und D haben alle -3,33 nach dem Runden. Was natürlich addiert nicht zu den insgesamt 10. Was ist der beste Weg, um über dieses Problem zu gehen? Eine optimale Lösung wäre zufällig, welche Person die etwas größeren Kosten bekommen.
Eine mögliche Lösung ist, wenn ich lasse nur die Schulden 10 - (A + B)
seine letzten Menschen, aber dann gibt es ein Problem, wenn vier Personen Kosten in Höhe von zum Beispiel 13,34 aufgeteilt. Die verschiedenen Teile wären dann 3,34, 3,34, 3,34 und 3,32, während die optimale Aufteilung 3,34, 3,34, 3,33, 3,33 wäre.
Einige könnten argumentieren, dass mit ausreichende Dezimalzahlen dies nur ein Problem ist, wenn große Mengen von Zeilen haben. Aber in einem wirtschaftlichen System denke ich, dass es wichtig ist, ein ausfallsicheres System von Anfang an zu haben. Es muss skalierbar sein, und kann nicht einmal den geringsten Fehler haben. Unfairness ist in Ordnung, nur keine Fehler.
ähnliches Problem: sum divided values problem (dealing with rounding error)
"Ungerechtigkeit ist in Ordnung, nur keine Fehler." - Ich liebe es – user1020317
+1 Präsentation – Smandoli
Ich denke, ich würde die beiden nächsten teilenden Werte finden, dann zwischen den beiden umschalten, wie sie zugewiesen sind. Dann überlegen Sie, was Sie mit dem (potentiellen) letzten ungeraden Wert machen wollen. – Smandoli