Wrong setting of decimal precision can result in big problem for accounting. Here is some tips from my experience.
It is ok (and sometime required to make a valid result) to increase the precision for non-Account items. I.e., Price, Discount.
But we should not change the precision of Account as it will affect account posting. Also, 2 digit is what we want for our Forms, it should be the same as what is recorded in system.
In coding, OpenERP is using the same concept as Excel’s “Calculate as Display”. Meaning, each number should be rounded (2 digit as setup in currency) before further calculation.
Make sure when writing the code, use this concept to avoid future problem.
"""Round value according to currency."""
return cur_obj.round(cr, uid, cur, value)
# add discount
amount_untaxed = sum(line.price_subtotal
for line in getattr(record, self._line_column))
add_disc = record.add_disc
add_disc_amt = cur_round(amount_untaxed * add_disc / 100)
o_res['add_disc_amt'] = add_disc_amt
o_res['amount_net'] = o_res['amount_untaxed'] - add_disc_amt
# we apply a discount on the tax as well.
# We might have rounding issue
o_res['amount_tax'] = cur_round(
o_res['amount_tax'] * (100.0 - (add_disc or 0.0))/100.0)
o_res['amount_total'] = o_res['amount_net'] + o_res['amount_tax']
You can note from the code that, we always round it (to 2 digits) before pass it to next calculation.
Please try to give a substantial answer. If you wanted to comment on the question or answer, just use the commenting tool. Please remember that you can always revise your answers - no need to answer the same question twice. Also, please don't forget to vote - it really helps to select the best questions and answers!