Passa al contenuto

Campo Float in Odoo: Guida Completa per Sviluppatori e Utenti

Guida pratica al campo Float nel modello dati di Odoo: come usarlo, gestirne la precisione e personalizzarlo tecnicamente
6 marzo 2026 di
Campo Float in Odoo: Guida Completa per Sviluppatori e Utenti
Dasolo
| Ancora nessun commento

Introduzione


Il campo Float è il tipo dati che si usa quando servono numeri con decimali: prezzi unitari, pesi dei prodotti, percentuali di sconto, aliquote IVA, fattori di conversione in distinte base. In Odoo questi valori vengono normalmente memorizzati come Float perché devono rappresentare frazioni e misure non intere.


All’apparenza è solo un input numerico, ma nasconde dettagli importanti: come vengono arrotondati i valori, quale precisione viene applicata in fase di salvataggio, e quando è preferibile usare un altro tipo di campo (ad esempio Monetary o Integer) per evitare problemi di arrotondamento o incoerenze nei report.


Questa guida spiega cosa memorizza il campo Float, come si comporta all’interno del framework Odoo, come aggiungerlo o personalizzarlo con Odoo Studio o scrivendo codice Python, e mostra casi d’uso concreti in Vendite, Magazzino e Contabilità.

Cos'è il campo Float in Odoo


Nel layer ORM di Odoo, un campo Float rappresenta numeri decimali e in PostgreSQL viene mappato su una colonna di tipo double precision, con circa 15 cifre significative. Per la maggior parte delle esigenze aziendali questa precisione è più che sufficiente.


Per l’utente il campo Float si presenta come un controllo numerico nelle viste di dettaglio; le cifre decimali visibili dipendono dal parametro digits impostato sul campo. Nelle liste i valori sono allineati a destra, e nelle viste pivot o nei grafici i Float partecipano alle aggregazioni come somma, media e massimo.


Ecco un esempio pratico di come si dichiara il campo in un modello 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,
    )

Il parametro digits indica due cose: il numero totale di cifre significative e il numero di decimali. Ad esempio (5, 2) permette fino a cinque cifre significative con due decimali.

In alternativa al valore numerico è possibile collegare il campo a un gruppo di precisione nominato, evitando così di fissare la precisione nel codice.


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

Odoo include gruppi di precisione predefiniti gestibili da interfaccia (Impostazioni > Tecnico > Struttura Database > Precisione decimale). I gruppi più usati sono Product Price, Product Unit of Measure, Discount e Stock Weight: usarli consente agli amministratori di aggiustare la precisione senza modificare il codice.


In Odoo Studio il campo Float è proposto come "Decimal Number". Quando lo crei via Studio eredita una precisione di default, ma puoi modificarne le proprietà dal pannello, rendendo questo strumento ideale per utenti che vogliono estendere le schermate senza intervenire sul codice.

Come funziona il campo


Definire un campo Float in Odoo crea automaticamente la colonna corrispondente nel database al momento dell’installazione o dell’aggiornamento del modulo: non servono script SQL manuali né migrazioni aggiuntive.


Il parametro digits influisce sia sulla visualizzazione sia sul valore salvato: se imposti digits=(6,2) e l’utente inserisce 3.14159, Odoo arrotonda e salva 3.14. Questo arrotondamento avviene già a livello di ORM, non soltanto nella visualizzazione.


Principali attributi del campo

Queste sono le proprietà più rilevanti che puoi configurare su un campo Float in Odoo:

  • digits: una tupla tipo (6, 2) o il nome di un gruppo di precisione. Controlla la precisione di visualizzazione e di memorizzazione.
  • required: rende il campo obbligatorio. Attenzione: un Float impostato a 0.0 passa comunque il controllo di obbligatorietà, cosa che in alcuni casi può non essere voluta.
  • default: valore iniziale al momento della creazione del record. Definire default=0.0 evita che il campo sia False/null e previene errori in calcoli automatici.
  • compute: collega il campo a un metodo Python che ne calcola il valore dinamicamente, utile per margini o conversioni derivate.
  • store: usato insieme a compute, permette di salvare il valore calcolato nel database così da poterlo cercare, filtrare e raggruppare.
  • group_operator: definisce come aggregare il campo in pivot e grafici (sum, avg, min, max). Di default i Float vengono sommati.
  • copy: indica se il valore viene duplicato quando si duplica il record. Di norma è True.

Aspetto nelle viste

In una vista form il Float è un input numerico che rispetta le impostazioni locali per i separatori decimali. Nelle liste i valori sono allineati a destra. Nelle ricerche puoi filtrare con operatori numerici per confronti e intervalli.


È possibile applicare widget ai Float: ad esempio il widget percentage moltiplica il valore per 100 e aggiunge il simbolo %, utile quando il dato è memorizzato come 0–1 ma si vuole mostrare 0–100% all’utente.


Interazione con l’ORM Odoo

Leggere un campo Float restituisce un float Python o False se non è impostato e non esiste un default. Scrivere accetta interi, float o False, mentre l’ORM applica la precisione definita da digits al momento del salvataggio.


Importante in sviluppo: non confrontare mai valori Float con ==. A causa delle imprecisioni aritmetiche, confronti diretti possono fallire. Usa le funzioni float_compare e float_is_zero di odoo.tools.float_utils, che rispettano la precisione configurata nel modello.

Esempi pratici in azienda


Dove si incontra il campo Float in azienda


Vendite: sconti per riga d’ordine

Il campo discount su sale.order.line è Float: uno sconto del 15% viene salvato come 15.0 e viene applicato al prezzo unitario, finendo su preventivi e fatture e partecipando ai report di marginalità. Precisione e formato degli sconti influenzano sia la comunicazione verso il cliente sia le analisi interne dei ricavi.


Magazzino: peso e volume dei prodotti

I prodotti hanno campi weight e volume di tipo Float: 2.5 kg o 0.003 m3 richiedono precisione decimale per calcolare correttamente costi di spedizione e integrazioni con corrieri. Valori errati o arrotondati in modo inadeguato possono tradursi in costi di spedizione sbagliati restituiti dalle API dei vettori.


Contabilità: aliquote fiscali

Le aliquote su account.tax sono Float: un’IVA al 22% si salva come 22.0. Il motore contabile legge questi valori per calcolare le imposte su ogni documento; piccoli errori di arrotondamento possono accumularsi su grandi volumi e creare discrepanze nei report fiscali.


Produzione: quantità in distinta base

Nella produzione la quantità di un componente in una distinta è un Float: una ricetta può richiedere 0.75 litri o 2.5 kg. I Float gestiscono queste frazioni correttamente, mentre usare Integer porterebbe a arrotondamenti che generano errori di produzione ripetuti.


Acquisti: fattori di prezzo e margini fornitore

Nelle listini fornitori e nelle regole di markup si usano Float per moltiplicatori e sconti: un fattore 1.25 (markup 25%) o 0.85 (sconto 15%) vengono memorizzati come Float e applicati automaticamente agli ordini di acquisto.

Creare o personalizzare un campo Float


Tre modalità per aggiungere un campo Float a un modello Odoo

Con Odoo Studio (senza codice)

Odoo Studio è lo strumento low-code integrato. Per aggiungere un Float senza scrivere codice:


  1. Apri Odoo Studio dal menu principale.
  2. Vai alla scheda o al form dove vuoi inserire il campo.
  3. Trascina il campo "Decimal Number" dalla palette sulla maschera.
  4. Configura etichetta, valore predefinito e decimali nelle proprietà del campo.
  5. Salva e chiudi Studio.

Studio creerà un campo con prefisso x_studio_ e lo aggiungerà alla vista automaticamente. È il metodo più semplice per utenti business che vogliono estendere le schermate senza coinvolgere sviluppatori.


Con Python in un modulo personalizzato

Per gli sviluppatori, i Float si dichiarano in Python all’interno del modulo: è il metodo consigliato quando serve versioning e distribuzione su più ambienti.


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.',
    )

Dopo aver dichiarato il campo, aggiungilo alla vista XML pertinente. All’installazione o aggiornamento del modulo Odoo creerà la colonna in DB automaticamente: è la strada standard per personalizzazioni serie e tracciabili.


Via API XML-RPC

Se automatizzi la configurazione o crei campi da script remoti, puoi usare l’API XML-RPC per creare campi Float programmaticamente:

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',
    }]
)

Impostare state: 'manual' segnala che il campo è stato creato manualmente (ad esempio via Studio o API). La precisione dei Float creati via API va gestita dai gruppi di Decimal Accuracy nel menu tecnico. Questo approccio è utile per script di deployment o per automazioni aziendali.

Buone pratiche


1. Usa gruppi di precisione nominati per valori standard

Meglio collegare il campo a un gruppo di precisione (es. 'Product Price') invece di hardcodare digits=(6,2). Così gli amministratori possono regolare la precisione dall’interfaccia e i campi personalizzati rimangono coerenti con quelli nativi.


2. Per importi monetari, usa Monetary, non Float

Questo è il consiglio più importante: Monetary gestisce la valuta associata al campo e le regole di arrotondamento per valuta. Usare Float per importi causa errori in ambienti multicurrency e risultati inconsistenti nei report finanziari.


3. Imposta sempre un valore di default

Metti default=0.0 per i campi numerici che devono partire da zero. Senza default il campo è False fino all’inserimento, e questo può generare errori in calcoli e metodi che si aspettano numeri.


4. Configura group_operator per i report

Se il campo rappresenta una quantità o un importo che ha senso sommare, usa group_operator='sum'. Se è una percentuale o un tasso da mediare, usa 'avg'. Un’aggregazione corretta migliora l’interpretabilità delle pivot e dei grafici.


5. Documenta le convenzioni sulle percentuali

Sii esplicito se un campo percentuale è memorizzato come 0–100 (es. 15.0 per 15%) o come 0–1 (es. 0.15 per 15%). Mischiare convenzioni provoca errori di calcolo difficili da diagnosticare.


Trappole comuni da evitare


Quando non usare Float per importi monetari

Un Float non contiene informazioni sulla valuta. Un valore 1500 può essere euro, dollari o altro. In scenari multicurrency usare Monetary evita incoerenze nei totali e problemi di reportistica finanziaria.


Non dimenticare digits quando serve più precisione

Se non definisci digits, Odoo applica per default 2 decimali. Questo va bene per i prezzi ma non per fattori di conversione o tassi di cambio che possono richiedere 4 o più decimali: arrotondare un conversion factor a 2 decimali può generare errori cumulativi.


Non confrontare Float con == in Python

A causa delle imprecisioni hardware, confronti diretti falliscono (es. 0.1 + 0.2 == 0.3 è False). Usa float_compare(value1, value2, precision_digits=2) e float_is_zero(value, precision_digits=2) da odoo.tools.float_utils per confronti affidabili secondo la precisione del campo.


Non usare Float dove serve un Integer

Se il campo rappresenta conteggi interi (numero di pacchi, unità, posizioni), preferisci Integer. Usare Float per numeri interi aumenta il rischio che gli utenti inseriscano decimali dove non hanno senso.


Gestire False nei metodi compute

Un Float senza default restituisce False se non impostato: nei metodi compute verifica sempre che il valore non sia False prima di fare operazioni, oppure imposta default=0.0 per evitare TypeError in produzione.

Conclusione


Riepilogo: il ruolo del campo Float in Odoo


Il campo Float è un mattoncino fondamentale per rappresentare prezzi, quantità, tassi e misure. Funziona in modo affidabile se gli si danno precisione e valori predefiniti corretti, e se si sceglie il tipo giusto (Monetary, Integer) quando serve.

Sia che tu aggiunga campi con Odoo Studio, scriva un modulo Python o gestisca lo schema via API/ORM, definire correttamente i Float fin dall’inizio semplifica mantenimento, reportistica e integrazioni.

Su Dasolo aiutiamo le aziende a implementare, personalizzare e ottimizzare Odoo in tutti i reparti. Possiamo supportarti nel progettare un modello dati pulito, aggiungere campi personalizzati o sviluppare moduli completi su misura. Contattaci Parliamo del tuo progetto Odoo.

Campo Float in Odoo: Guida Completa per Sviluppatori e Utenti
Dasolo 6 marzo 2026
Condividi articolo
Accedi per lasciare un commento