Feia dies que no feia cap post dels pedaços que vaig enviant al projecte de l'OpenObject Server, avui després de debatre, de moment sense la resposta final per part de l'equip de Qualitat) (Bug: #352471)

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ç.


Reblog this post [with Zemanta]
0

Afegeix un comentari

Arxiu del blog
Etiquetes
Altres coses meves
Blogroll
Blogroll
Blogs que llegeixo
Blogs que llegeixo
Subscriu-me
Subscriu-me
Logotip
Logotip
Total de visualitzacions de pàgina:
Total de visualitzacions de pàgina:
29397
S’està carregant