Jacopo,

I posted something on this before. As with all rounding, there will be losses (or pluses). It doesn't matter how many decimal places you do your rounding with. The eventual invoices going out to the customers is the weak link! Those invoices have 2 decimal places, which means a rounding action is already done there.

One idea is to keep the total in view, and then compensate for rounding discrepancies in the last invoice.

Say you have 3 invoices. For the first 2, you send those invoices out with rounding as usual. The last invoice will take the correct total and deduct the amounts from past invoices. Whatever is "extra/less" in the final invoice, label it as "rounding adjustments". That way, no matter what the rounding discrepancies, the final invoice will always bring the total invoiced amount to the correct figure.

Jonathon

Jacopo Cappellato wrote:
Unfortunately, there are still some rounding issues when sales taxes are involved.
After some research, I think I have found where the problem is:
OrderPaymentPreference.maxAmount (the field where the auth/captured amount is stored) has 2 decimal digits; the field OrderAdjustment.amount has 3 decimal digits; the number of digits (set in the arithmetic properties file) for sales taxes is 3. My guess is that somewhere we move a 3 decimal number (without proerly rounding it as we do with the order grand total) to a 2 decimal field (maxAmount) and so the db approximate the number for us (in a different way from the grand total).
The end result is this:

https://demo.hotwaxmedia.com/ordermgr/control/orderview?orderId=WSCO10001

The order total is $18.83 (rounded from 18.825)
The amount auth/captured/invoiced is $18.82

Any hints on how we can fix this?

Jacopo



Reply via email to