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.
def cur_round(value): """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']