credativ team mailing list archive
-
credativ team
-
Mailing list archive
-
Message #01580
[Bug 881356] Re: Floating Point / Rounding issue in stock partial picking wizard
WRT suggested fix, please note that when comparing 2 float values we need to be consistent eveywhere.
Let's wait until this server bug 882036 is fixed with new generic util methods for comparing floats (via lp:~openerp-dev/openobject-server/trunk-float-rounding-odo) and then we can use that to solve this bug. This should be ready very soon.
Thanks for your patience.
** Changed in: openobject-addons
Status: Fix Committed => In Progress
--
You received this bug notification because you are a member of OpenERP
Framework Experts, 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):
In Progress
Status in OpenERP Addons 6.0 series:
Confirmed
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