hello wouldn't round(a,precision) = round(b,precision) do it ? and this is a potential trap for every float comparison ( ==, != ) which is based on python calculated values
-- You received this bug notification because you are a member of OpenERP CTP, which is subscribed to OpenERP Addons. https://bugs.launchpad.net/bugs/881356 Title: Floating Point / Rounding issue in stock partial picking wizard Status in OpenERP Addons (modules): New Bug description: We encountered an Floating Point rounding issue, in the Partial Picking wizard (stock/wizard/stock_partial_picking.py, do_partial) "Processing quantity 390.268 kg for $PRODUCT is larger than the available quantity 390.268 kg." (Decimal Precision of Product UoM is set to 3, UoM Rounding for kg is 0.001) OK, so I added an output of the test if calc_qty > move.move_id.product_qty: 390.268 > 390.268 As one would say, 390.268 > 390.268 should be false... But: calc_qty - move.move_id.product_qty => 390.268 - 390.268 is 5.68434188608e-14 This is beyond the default python %s rounding of 6 decimals (to understand the 390.268 > 290.268 output above) So here is a real problem with rounding precision and float (instead of decimal) data type. I changed the query to regard decimal precision: prec = dp.get_precision('Product UoM')(cr)[1] or 0 if int(calc_qty * (10**prec)) > int(move.move_id.product_qty * (10**prec)): and it works fine. To manage notifications about this bug go to: https://bugs.launchpad.net/openobject-addons/+bug/881356/+subscriptions _______________________________________________ Mailing list: https://launchpad.net/~openerp-dev-gtk Post to : [email protected] Unsubscribe : https://launchpad.net/~openerp-dev-gtk More help : https://help.launchpad.net/ListHelp

