← Back to team overview

openerp-expert-production team mailing list archive

[Bug 511193] Re: unit factor is limited to 5 zeros

 

I agree that with Fabien that float data-type is inadequate for the
arithmetic requirements for unit conversion. In both Python[1] and
PostgreSQL[2], the precision of float types are dependent on CPU
architecture and Operating System. An Ideal fix would be a data type
that is exact to any arbitrary number of digits precision. In Python,
the decimal type defaults to 28 digits of precision[3] however has no
defined maximum in implementation. In the PostgreSQL manual, the numeric
data type is recommended for fields of arbitrary precision. As stated in
the documentation[4] "Specifying NUMERIC without any precision or scale
creates a column in which numeric values of any precision and scale can
be stored, up to the implementation limit on precision.". This datatype,
allows for arbitrary precision and and is arithmetically exact, and
should be the proper solution for this bug.

[1]http://docs.python.org/library/stdtypes.html#numeric-types-int-float-long-complex
[2]http://www.postgresql.org/docs/8.1/static/datatype.html#DATATYPE-FLOAT
[3]http://docs.python.org/library/decimal.html#module-decimal
[4]http://www.postgresql.org/docs/8.1/static/datatype.html#DATATYPE-NUMERIC-DECIMAL

-- 
unit factor is limited to 5 zeros
https://bugs.launchpad.net/bugs/511193
You received this bug notification because you are a member of OpenERP
Manufacturing Experts, which is a direct subscriber.

Status in OpenObject Addons Modules: Fix Released
Status in OpenObject Addons 5.0 series: Won't Fix
Status in OpenObject Addons trunk series: Fix Released

Bug description:
I have got a category measure unit size.

The master unit is meter, but I need having m2, m3 and related measure units like mm, mm2, mm3, micrometer

so 1m = 1000mm
but 1m = 1000000micrometer

If I try including a conversion factor where I need more than 5 zeros, system crashes showing this error:

Environment Information :
System : Windows-XP-5.1.2600-SP3
OS Name : nt
Operating System Release : XP
Operating System Version : 5.1.2600
Operating System Architecture : 32bit
Operating System Locale : es_ES.cp1252
Python Version : 2.5.2
OpenERP-Client Version : 5.0.6
Last revision No. & ID :Bazaar Package not Found !Traceback (most recent call last):
  File "/home/xabier/openerp-server/server/bin/netsvc.py", line 244, in dispatch
    result = LocalService(service_name)(method, *params)
  File "/home/xabier/openerp-server/server/bin/netsvc.py", line 73, in __call__
    return getattr(self, method)(*params)
  File "/home/xabier/openerp-server/server/bin/addons/base_module_record/base_module_record.py", line 38, in execute
    res = super(recording_objects_proxy, self).execute(*args, **argv)
  File "/home/xabier/openerp-server/server/bin/service/web_services.py", line 583, in execute
    res = service.execute(db, uid, object, method, *args)
  File "/home/xabier/openerp-server/server/bin/osv/osv.py", line 59, in wrapper
    return f(self, dbname, *args, **kwargs)
  File "/home/xabier/openerp-server/server/bin/osv/osv.py", line 118, in execute
    res = pool.execute_cr(cr, uid, obj, method, *args, **kw)
  File "/home/xabier/openerp-server/server/bin/osv/osv.py", line 110, in execute_cr
    return getattr(object, method)(cr, uid, *args, **kw)
  File "/home/xabier/openerp-server/server/bin/osv/orm.py", line 2458, in write
    'where id in ('+ids_str+')', upd1)
  File "/home/xabier/openerp-server/server/bin/sql_db.py", line 76, in wrapper
    return f(self, *args, **kwargs)
  File "/home/xabier/openerp-server/server/bin/sql_db.py", line 120, in execute
    res = self._obj.execute(query, params)
ProgrammingError: numeric field overflow
DETAIL:  A field with precision 12, scale 6 must round to an absolute value less than 10^6.
 
This is limiting the possibility of having all posible and needed conversion factors on measure units, so I think it could be considered a bug or maybe wishlist

Thank you!!

Ana