Правильные суммы с делением сумм, устранение ошибок округления

Веб-приложение, написанное на PHP с базой данных MySQL.

У меня есть система, которая рассчитывает разные затраты для нескольких человек при разделении стоимости. Например, Лицо A покупает что-то за 10, а лица B, C и D должны разделить стоимость.

Таким образом, система должна зарегистрировать положительную запись для человека A из 10 и отрицательную запись из 10/3 для B, C и D.

Однако, когда это будет сделано; B, C и D все имеют -3,33 после округления. Что, конечно, не дает в сумме 10. Как лучше всего решить эту проблему? Оптимальное решение также рандомизировало бы, кто получает немного большую цену.

Одно из возможных решений — просто оставить долг последнего человека равным 10 - (A + B), но тогда возникнет проблема, если четыре человека разделят стоимость, например, 13,34. Тогда разные части будут 3,34, 3,34, 3,34 и 3,32,тогда как оптимальное соотношение будет 3,34, 3,34, 3,33, 3,33.

Кто-то может возразить, что с достаточным числом десятичных знаков это проблема только при большом количестве строк. Но в экономичной системе, я думаю, важно иметь отказоустойчивую -безопасную систему с самого начала. Он должен быть масштабируемым и не должен иметь ни малейшей ошибки. Несправедливость — это нормально, но не ошибки.

Аналогичная задача:задача суммы разделенных значений (с ошибкой округления)

8
задан Community 23 May 2017 в 12:27
поделиться