Es tracta d'un error en l'entrada de floats de més de 6 decimals. El sistema només entra la precisió de 6. Això és degut que al fer la substitució del float pel comodí
%f
, per defecte agafa precisicó de 6 (Mirar Nota 3 de la secció 'string formatting operations'). Se li pot canviar la precisió fent %.12f
(si volem precisió 12 per exemple)El pedaç que he enviat és molt senzill, ja que al definir una columna com a float, pots definir-li amb quina precisió vols treballar fent per exemple:
fields.float('Camp', digits=(13,12))
Això ens crearà un camp que el valor del camp tindrà 13 posicions i 12 seran decimals.
L'OpenObject server quan introdueix les dades a la base de dades fa servir el caràcter %f per fer la inserció i per això mateix és perd la precisió i només queden reflectits els 6 primers decimals.
La solució és simple, en comptes d'agafar sempre el caràcter %f pels floats, s'ha de mirar si t'he definit l'atribut digits, i en el cas que el tigui fer que el caràcter sigui %.digits[1]f
Podeu veure el pedaç aquí: float_precision.patch
Actualització:
L'equip de Qualitat de l'OpenERP ha decidit que el pedaç no era necessari, crec que tenen raó en part, ja que en la versió 5.0 s'utilitza psycopg2 i no és necessari el formateix de les variables en les sentències SQL, però en la versió 4.2.x és necessari diguin el que diguin, ja que jo la tinc en producció en diferents llocs i el bug existeix. O sigui que si us trobeu amb aquest problema el podreu solventar amb aquest pedaç.
Afegeix un comentari