Ứng dụng web được mã hóa bằng PHP với cơ sở dữ liệu MySQL.Số tiền chính xác với số tiền chia, đối chiếu lỗi làm tròn
Tôi có một hệ thống tính toán chi phí khác nhau cho một số người khi chia chi phí. Ví dụ: Người A mua thứ gì đó cho 10 và Người B, C và D nên chia chi phí.
Hệ thống này nên do đăng ký kỷ lục dương tính với người Một 10 và hồ sơ tiêu cực của 10/3 cho B, C và D.
Tuy nhiên, khi điều này được thực hiện; B, C và D tất cả đều có -3.33 sau khi làm tròn. Trong đó tất nhiên không thêm vào tổng số 10. Cách tốt nhất để giải quyết vấn đề này là gì? Một giải pháp tối ưu sẽ ngẫu nhiên những gì người nhận được là chi phí hơi lớn hơn là tốt.
Một giải pháp khả thi là nếu tôi chỉ để khoản nợ của người cuối cùng là 10 - (A + B)
, nhưng sau đó có vấn đề nếu bốn người chia một chi phí ví dụ 13.34. Các phần khác nhau sau đó sẽ là 3,34, 3,34, 3,34 và 3,32, trong khi phân chia tối ưu sẽ là 3,34, 3,34, 3,33, 3,33.
Một số có thể cho rằng với số thập phân đủ đây chỉ là vấn đề khi có số lượng lớn hàng. Nhưng trong một hệ thống kinh tế, tôi nghĩ rằng điều quan trọng là phải có một hệ thống không an toàn ngay cả khi bắt đầu. Nó cần phải là có thể mở rộng và thậm chí không thể có lỗi nhỏ nhất. Tính không lành mạnh là không sao, không phải lỗi.
vấn đề tương tự: sum divided values problem (dealing with rounding error)
"Sự không lành mạnh là ổn, không phải lỗi." - yêu thích nó – user1020317
+1 bản trình bày – Smandoli
Tôi nghĩ rằng tôi sẽ tìm thấy hai giá trị chia gần nhất, sau đó chuyển đổi giữa hai khi chúng được gán. Sau đó, tìm hiểu xem phải làm gì với giá trị kỳ quặc cuối cùng (tiềm năng). – Smandoli