Ir al contenido

Campo Float en Odoo: Guía Completa y Práctica

Guía práctica sobre el campo Float en el modelo de datos de Odoo: uso cotidiano, control de precisión y ajustes técnicos avanzados
6 de marzo de 2026 por
Campo Float en Odoo: Guía Completa y Práctica
Dasolo
| Sin comentarios aún

Introducción


El campo Float es el formato habitual en Odoo cuando necesitas guardar números con decimales. Precios unitarios, pesos de producto, porcentajes de descuento, tipos impositivos y factores de conversión en listas de materiales se modelan normalmente como Float en la base de datos de Odoo.


A simple vista parece un campo numérico corriente, pero conviene entender su precisión, cómo afecta a los informes y agregaciones, y en qué situaciones merece la pena elegir otro tipo de campo.


Esta guía explica qué almacena un Float, cómo se comporta dentro del framework de Odoo, cómo crearlo o adaptarlo desde Studio o con código Python, y ejemplos prácticos en Ventas, Inventario y Contabilidad.

¿Qué es el campo Float en Odoo?


En el ORM de Odoo, un Float representa números decimales y en la base de datos PostgreSQL se mapea a una columna de doble precisión, con alrededor de 15 dígitos significativos. Para la mayoría de usos empresariales esto es más que suficiente.


Para el usuario aparece como un control numérico en los formularios; la cantidad de decimales que muestra depende del parámetro digits que configures. En las vistas tipo lista los Floats se alinean a la derecha y mantienen la misma precisión; en tablas dinámicas y gráficos participan en agregaciones como suma, media o máximo.


Ejemplo en la definición de un modelo en Python:

from odoo import fields, models

class SaleOrderLine(models.Model):
    _inherit = 'sale.order.line'

    custom_margin = fields.Float(
        string='Custom Margin',
        digits=(5, 2),
        default=0.0,
    )

El parámetro digits es una tupla: el primer valor indica el total de dígitos significativos y el segundo las cifras decimales. Por ejemplo, (5, 2) permite hasta cinco dígitos en total con dos posiciones decimales.

También puedes usar un grupo de precisión con nombre en lugar de fijar los dígitos en el código:


price_premium = fields.Float(
    string='Price Premium',
    digits='Product Price',
)

Odoo dispone de grupos de precisión configurables desde Ajustes → Técnico → Estructura de la base de datos → Precisión decimal. Grupos habituales son Product Price, Product Unit of Measure, Discount o Stock Weight. Usar estos grupos permite ajustar la precisión desde la interfaz sin tocar código.


En Odoo Studio el campo se presenta como "Decimal Number". Si lo añades desde Studio, usará la precisión por defecto salvo que modifiques sus propiedades. Es la opción más accesible para usuarios que quieren ampliar formularios sin depender de desarrolladores.

Cómo funciona el campo


Al declarar un Float en un módulo, Odoo crea automáticamente la columna en la base de datos al instalar o actualizar el módulo. No necesitas escribir SQL ni scripts de migración manuales.


El parámetro digits afecta tanto a la presentación como al almacenamiento: controla el redondeo que Odoo aplica antes de guardar. Por ejemplo, con digits=(6,2) un valor introducido como 3.14159 se redondeará y almacenará como 3.14; ese redondeo ocurre en el nivel del ORM, no sólo en la visualización.


Atributos clave del campo

A continuación las propiedades más relevantes que puedes configurar en un Float dentro de Odoo:

  • digits: Tupla tipo (6, 2) o el nombre de un grupo de precisión. Controla visualización y almacenamiento.
  • required: Marca el campo como obligatorio. Ten en cuenta que un Float con valor 0.0 pasa la validación de obligatorio, lo que puede no ser siempre lo deseado.
  • default: Valor por defecto al crear un registro. Poner default=0.0 evita que el campo sea False/null sin valor inicial.
  • compute: Permite enlazar una función Python que calcule el valor del campo dinámicamente; útil para márgenes o conversiones derivadas.
  • store: Con compute, indica que el valor calculado se guarda en la base de datos para poder buscarlo y agruparlo.
  • group_operator: Define cómo se agregan los valores en pivots y gráficos: 'sum', 'avg', 'min', 'max'. Por defecto los Float suelen agruparse con 'sum'.
  • copy: Indica si el valor se duplica al duplicar un registro. Por defecto es True.

Apariencia en las vistas

En formularios el Float se muestra como un campo numérico y respeta la configuración regional del usuario para separadores decimales. En vistas de lista se alinea a la derecha y en búsquedas puedes filtrar con operadores numéricos.


Puedes aplicar widgets a un Float; por ejemplo, el widget percentage multiplica el valor almacenado por 100 y añade el símbolo % en pantalla, útil cuando almacenas tasas en formato 0–1 pero quieres verlas como porcentajes legibles.


Interacción con el ORM de Odoo

Al leer un Float obtienes un float de Python o False si no tiene valor y no existe un default. Al escribir se aceptan enteros, floats o False. El ORM aplica la precisión definida en digits en el momento del guardado.


Importante para desarrolladores: evita comparar floats con == en Python. Por la naturaleza de la aritmética en coma flotante, dos valores que aparentan iguales pueden no serlo. Usa float_compare y float_is_zero de odoo.tools.float_utils, que respetan la precisión del campo.

Casos de uso en la empresa


Ejemplos prácticos en distintos módulos


Ventas: porcentajes de descuento en líneas de pedido

El campo discount en sale.order.line es un Float. Si un comercial aplica un 15% se almacena como 15.0 y se incorpora al cálculo del precio unitario, se refleja en presupuestos y facturas y afecta a los informes de margen. Un tratamiento correcto de descuentos es clave para la comunicación con el cliente y el análisis de rentabilidad.


Inventario: pesos y volúmenes de producto

Los productos tienen campos weight y volume como Float. Un artículo de 2.5 kg o 0.003 m3 necesita decimales; esos valores se usan en cálculos de envío y en integraciones con transportistas. Si los pesos no son precisos, las tarifas devueltas por APIs de mensajería pueden ser incorrectas.


Contabilidad: tipos impositivos

Los tipos de impuesto en account.tax se guardan como Float. Un IVA del 21% se almacena como 21.0; la contabilidad usa ese valor para calcular impuestos en facturas y gastos. La precisión aquí es crítica porque pequeños redondeos acumulados pueden crear discrepancias en los informes fiscales.


Manufactura: cantidades en la lista de materiales

En Manufacturing la cantidad de componentes en una BOM es Float: por ejemplo 0.75 litros o 2.5 kg. Los Floats permiten manejar fracciones sin pérdida; usar Integer obligaría a redondear y generaría errores de producción que se acumulan.


Compras: factores de precio y márgenes de proveedores

En listas de precios y reglas de descuento, se usan Float para multiplicadores y márgenes. Un factor de 1.25 (25% de recargo) o 0.85 (15% de descuento) se aplica en cálculos automáticos de precios en pedidos de compra.

Crear o personalizar un campo Float


Cómo añadir un campo Float en Odoo (tres vías)

Usando Odoo Studio (sin código)

Odoo Studio es la herramienta low-code incluida. Para añadir un Float sin programar:


  1. Abrir Odoo Studio desde el menú principal.
  2. Ir al formulario donde quieres el campo.
  3. Arrastrar un campo "Decimal Number" desde el selector al formulario.
  4. Configurar etiqueta, valor por defecto y decimales en el panel de propiedades.
  5. Guardar y cerrar Studio.

Studio crea el campo con prefijo x_studio_ y lo agrega a la vista; no hace falta tocar la base de datos. Es la forma más directa para usuarios de negocio que necesitan ampliar formularios sin depender de desarrolladores.


Usando Python en un módulo personalizado

Para desarrolladores que versionan y despliegan cambios, definir el Float en Python es la vía recomendada:


from odoo import fields, models

class ResPartner(models.Model):
    _inherit = 'res.partner'

    x_credit_limit = fields.Float(
        string='Credit Limit',
        digits=(12, 2),
        default=0.0,
        help='Maximum outstanding balance allowed for this customer.',
    )

Tras declarar el campo hay que añadirlo en la vista XML para que aparezca en la interfaz; Odoo se encargará de crear la columna en la base de datos al instalar o actualizar el módulo. Es el flujo estándar para personalizaciones robustas.


Usando la API XML-RPC

Si gestionas Odoo de forma programática (scripts de despliegue o notebooks remotos), también puedes crear campos Float vía XML-RPC:

field_id = models.execute_kw(
    ODOO_DB, uid, ODOO_API_KEY,
    'ir.model.fields', 'create',
    [{
        'name': 'x_custom_coefficient',
        'field_description': 'Custom Coefficient',
        'model_id': model_id,
        'ttype': 'float',
        'state': 'manual',
    }]
)

El atributo state: 'manual' indica que el campo fue creado fuera de un módulo, adecuado para campos hechos desde Studio o la API. La precisión decimal para campos creados vía API se gestiona desde la configuración técnica de Precisión decimal. Este enfoque es útil para automatizar despliegues y configuraciones remotas.

Buenas prácticas


Regla 1: usar grupos de precisión nombrados

En lugar de fijar digits=(6,2) en duro, referencia un grupo como 'Product Price' o 'Product Unit of Measure'. Así podrás alinear la precisión con los campos nativos y permitir ajustes desde la interfaz sin tocar código.


Regla 2: usar Monetary para importes en moneda, no Float

Este es el consejo más importante: los importes con moneda deben usar el tipo Monetary. Ese campo enlaza con un campo currency_id, aplica redondeos según la divisa y funciona correctamente en entornos multi-divisa. Usar Float para precios o importes contables acaba provocando inconsistencias de redondeo y errores en informes multi-moneda.


Regla 3: siempre asignar un valor por defecto

Pon default=0.0 en campos numéricos que deban empezar en cero. Si no, el valor será False hasta que el usuario lo rellene, lo que puede provocar errores en métodos compute o en operaciones aritméticas que esperan un número.


Regla 4: definir group_operator para los informes

Si el campo representa una cantidad o importe que debe sumarse en informes, usa group_operator='sum'. Si es una tasa o porcentaje que conviene promediar, usa 'avg'. Esto garantiza que pivots y gráficos agreguen los datos de forma coherente para el análisis.


Regla 5: documentar la convención de porcentajes

Si un Float almacena un porcentaje, aclara si usa la escala 0–100 (por ejemplo 15.0 para 15%) o 0–1 (0.15 para 15%). Mezclar ambas convenciones en el modelo provoca errores silenciosos difíciles de depurar.


Errores comunes


¿Se puede usar Float para importes monetarios?

Los Float no contienen información de divisa. Un 1500 en un Float no indica si es euros o dólares. En instalaciones con varias divisas esto puede dar totales incorrectos. Para importes monetarios usa siempre el campo Monetary.


No definir el parámetro digits

Si no especificas digits, Odoo aplica por defecto 2 decimales. Eso está bien para precios comunes, pero resulta insuficiente para tasas de cambio o factores de conversión que requieren 4 o 6 decimales. Un factor redondeado a 2 decimales puede generar errores acumulativos en los cálculos.


Comparar Float con == en Python

Por la naturaleza de la coma flotante, comparaciones como 0.1 + 0.2 == 0.3 fallan en Python. Usa float_compare(value1, value2, precision_digits=2) y float_is_zero(value, precision_digits=2) de odoo.tools.float_utils para comparaciones fiables que respeten la precisión definida.


Usar Float cuando toca Integer

Si el campo sólo debe contener números enteros (un recuento, número de paquetes, posición en una secuencia), utiliza Integer. Los Floats en esos casos permiten introducir decimales que no tienen sentido y confunden a los usuarios.


No manejar valores False en métodos compute

Un Float sin default devuelve False cuando no se ha asignado. En computes, comprueba ese caso antes de operar o define default=0.0 para evitar TypeError en escenarios reales de datos.

Conclusión


Resumen: por qué es importante el Float en Odoo


El campo Float es una pieza esencial del modelo de datos de Odoo para manejar decimales en precios, cantidades, tasas y medidas. Bien configurado en cuanto a precisión y valores por defecto, es fiable y versátil. Las mejores prácticas clave son usar grupos de precisión, emplear Monetary para importes, definir defaults y documentar convenciones de porcentaje.

Ya sea desde Odoo Studio, desarrollando un módulo en Python o gestionando el modelo por API/ORM, acertar con los campos Float desde el principio simplifica la vida y evita errores posteriores en la implementación.

En Dasolo acompañamos a empresas en la implementación, personalización y optimización de Odoo en todas las áreas. Desde diseñar un modelo de datos coherente hasta añadir campos personalizados o desarrollar módulos completos, ofrecemos soporte técnico y funcional. Contacta con nosotros y hablemos de tu proyecto Odoo.

Campo Float en Odoo: Guía Completa y Práctica
Dasolo 6 de marzo de 2026
Compartir esta publicación
Iniciar sesión para dejar un comentario