Веб-приложение, написанное на 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.
Кто-то может возразить, что с достаточным числом десятичных знаков это проблема только при большом количестве строк. Но в экономичной системе, я думаю, важно иметь отказоустойчивую -безопасную систему с самого начала. Он должен быть масштабируемым и не должен иметь ни малейшей ошибки. Несправедливость — это нормально, но не ошибки.
Аналогичная задача:задача суммы разделенных значений (с ошибкой округления)