Bug Report: Error In Tax Calculation And Rounding

Error In Tax Calculation And Rounding

I just tested this on the demo to confirm it's not unique to my system. See the attached images. One the one hand, it is just a display bug or computation error on the invoice entry form.

SS

Scott Smith

Reported

I just tested this on the demo to confirm it’s not unique to my system.

See the attached images.

One the one hand, it is just a display bug or computation error on the invoice entry form.

However, it confuses everyone and as we have a lot of $2.00 sales, I’m getting a lot of errors.

Clerks get busy, look at Grand Total, and put in a payment of $2.19, and then of course the sale is only partially paid and someone has to correct the error (we don’t allow clerks to do that.)

  • SS

    Scott Smith

    Answered

    The following fixes the display rounding errors in themes/default/assets/js/custom.js around line 286.

            // fix rounding errors for displayed amounts in invoice add/edit
            total = Math.round((total + Number.EPSILON)*100)/100;
            order_discount = Math.round((order_discount + Number.EPSILON)*100)/100;
            order_tax = Math.round((order_tax + Number.EPSILON)*100)/100;
            shipping = Math.round((shipping + Number.EPSILON)*100)/100;
    
            grand_total = (total - order_discount) + order_tax + shipping;
            $('#order_discount_total').text(formatMoney(order_discount));
            $('#order_tax_total').text(formatMoney(order_tax));
            $('#grand_total').text(formatMoney(grand_total));
    

    I will still be watching the sales and payment fields in the database – at least for a while – until I’m sure this isn’t slipping through elsewhere.

  • SS

    Scott Smith

    Answered

    Floating point is the worst!

    I miss my old system from 30-40 years ago. It had a Binary Coded Decimal data type. Very useful for dealing with financial and scientific data.

    Absent that, I think it is better to just use integers and “count” in the smallest currency unit (one cent in the US). It requires a little manipulation on input (move the decimal) and display (move the decimal the other direction), but it’s not so bad.

    Too bad there is so much pre-existing floating code in compilers, libraries, frameworks, etc. Impractical to change unless you’re coding from scratch.

    https://husobee.github.io/money/float/2016/09/23/never-use-floats-for-currency.html

  • MS

    Mian Saleem

    Answered

    Hello,

    Yes, might be js rounding. I will check it tomorrow.

    Thank you

  • MS

    Mian Saleem

    Answered

    Hello,

    I have checked. accounting.js is causing the issue. It should round 2.195 to 2.20 but it’s rounding to 2.19

    I will update to number_format partially in future updates.

    Thank you

  • Login to Reply