[FIX] pos_cash_rounding: fix "almost zero" error
TLDR: zero is not always zero in js STEPS: * On your POS, add a Cash rounding > Rounding precision 0.10 > Rounding method DOWN * Set a product with a Unit of Measure with 3 decimals (kg for instance) * In POS: - Make an order for 0.514 kg at 429.99€ + 0.510 kg at 429.99 + 0.60€ - The total of the order is 440.90 (exact total would be 440.90976) BEFORE: The total to pay is 440.80 AFTER: The total to pay is 440.90 WHY: * var total = round_pr(this.get_total_with_tax(), this.pos.cash_rounding[0].rounding); // 440.90000000000003 * var rounding_applied = total - this.get_total_with_tax(); // 5.684341886080802e-14 --- opw-2357917 closes odoo/odoo#60754 X-original-commit: 262a9dc935d74b30ffeaff6d6d88aac150793d6e Signed-off-by: pimodoo <pimodoo@users.noreply.github.com>
This commit is contained in:
@@ -3262,7 +3262,10 @@ exports.Order = Backbone.Model.extend({
|
||||
|
||||
var rounding_applied = total - (this.pos.config['iface_tax_included'] === "total"? this.get_subtotal(): this.get_total_with_tax());
|
||||
// because floor and ceil doesn't include decimals in calculation, we reuse the value of the half-up and adapt it.
|
||||
if(this.pos.cash_rounding[0].rounding_method === "UP" && rounding_applied < 0) {
|
||||
if (utils.float_is_zero(rounding_applied)){
|
||||
// https://xkcd.com/217/
|
||||
return 0;
|
||||
} else if(this.pos.cash_rounding[0].rounding_method === "UP" && rounding_applied < 0) {
|
||||
rounding_applied += this.pos.cash_rounding[0].rounding;
|
||||
}
|
||||
else if(this.pos.cash_rounding[0].rounding_method === "DOWN" && rounding_applied > 0){
|
||||
|
||||
Reference in New Issue
Block a user