Overslaan naar inhoud

Float Field in Odoo: De Complete Gids

Praktische gids voor het Float-veld in Odoo: van basisgebruik tot nauwkeurigheidsbeheer en technische aanpassingen
6 maart 2026 in
Float Field in Odoo: De Complete Gids
Dasolo
| Nog geen reacties

Introductie


Het Float-veld is een van de meest gebruikte veldtypes in Odoo zodra je met kommagetallen werkt. Denk aan eenheidsprijzen, productgewichten, kortingspercentages, btw-tarieven of conversiefactoren in stuklijsten — zulke waarden worden doorgaans als Float opgeslagen in het datamodel van Odoo.


Op het eerste gezicht lijkt het gewoon een numeriek invoerveld. Toch zijn er belangrijke details rond precisie, afronding en rapportering waarmee je rekening moet houden, en er zijn situaties waarin een ander veldtype beter geschikt is.


Deze gids legt uit wat een Float-veld exact opslaat, hoe het zich gedraagt binnen het Odoo-framework, hoe je het toevoegt of aanpast via Odoo Studio of Python, en geeft concrete voorbeelden uit verkoop, voorraad en boekhouding.

Wat is het Float-veld in Odoo


Binnen de Odoo ORM bewaart een Float-veld decimale waarden en wordt het in PostgreSQL als een double precision-kolom gemapt, met ongeveer 15 significante cijfers. Voor de meeste bedrijfsgevallen is dat meer dan voldoende nauwkeurigheid.


Voor de gebruiker verschijnt een Float-veld als een numeriek invoerveld in formulieren. Het aantal zichtbare decimalen wordt geregeld door de digits-parameter op het veld. In lijstweergaven worden Float-waarden standaard rechts uitgelijnd en in draaitabellen en grafieken nemen ze deel aan aggregaties zoals som, gemiddelde of maximum.


Zo definieer je het typisch in een Python-model:

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

De digits-parameter is een tuple: het eerste getal is het totale aantal significante cijfers, het tweede het aantal decimalen. Bijvoorbeeld (5, 2) staat vijf significante cijfers toe met twee decimalen.

In plaats van vaste digits kun je ook verwijzen naar een benoemde precisiegroep:


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

Odoo bevat meerdere standaard precisiegroepen die je vindt onder Instellingen > Technisch > Database-structuur > Decimale nauwkeurigheid. Belangrijke groepen zijn onder andere Product Price, Product Unit of Measure, Discount en Stock Weight. Gebruik van zulke groepen laat toe om precisie aan te passen via de interface zonder codewijzigingen.


In Odoo Studio heet het veld vaak Decimal Number. Wanneer je het via Studio aanmaakt, gebruikt het de standaardnauwkeurigheid tenzij je dat in de eigenschappen aanpast. Daardoor is dit een toegankelijke manier voor businessgebruikers om formulieren uit te breiden zonder ontwikkelaar nodig te hebben.

Hoe het veld werkt


Bij het definiëren van een Float-veld zorgt Odoo automatisch voor het aanmaken of bijwerken van de databankkolom tijdens installatie of upgrade van het modulepakket. Je hoeft geen SQL of migratiescripts manueel te schrijven.


De digits-parameter regelt zowel de weergave als de afronding voor opslag. Als je digits=(6, 2) instelt en een gebruiker 3.14159 invoert, zal Odoo opslaan als 3.14 — de afronding gebeurt op ORM-niveau, niet alleen in de user interface.


Belangrijke veldattributen

Dit zijn de eigenschappen van een Float-veld die je het vaakst zult instellen in Odoo:

  • digits: een tuple zoals (6, 2) of de naam van een precisiegroep. Stuurt zowel weergave- als opslagnauwkeurigheid.
  • required: maakt het veld verplicht. Let op: een Float met waarde 0.0 geldt als ingevuld, wat niet altijd het gewenste gedrag is.
  • default: standaardwaarde voor nieuw aangemaakte records. default=0.0 voorkomt dat het veld leeg (False) blijft.
  • compute: koppel een Python-methode die de waarde berekent, handig voor afgeleide velden zoals marges of conversies.
  • store: met compute gekoppeld zorgt dit ervoor dat de berekende waarde opgeslagen wordt zodat je kunt zoeken, filteren en groeperen.
  • group_operator: bepaalt hoe het veld wordt geaggregeerd in draaitabellen/grafieken, bijvoorbeeld 'sum', 'avg', 'min' of 'max'. Float-velden gebruiken standaard 'sum'.
  • copy: regelt of de waarde wordt gekopieerd bij dupliceren van een record. Standaard True.

Weergave in views

In formulierweergaven renderen Float-velden als numerieke invoervelden en respecteren ze de locale voor decimaalscheiding. In lijstweergaven staan ze standaard rechts en in zoekfilters kun je numerieke vergelijkingsoperatoren gebruiken.


Je kunt widgets toepassen op Float-velden. Het percentage-widget bijvoorbeeld vermenigvuldigt de opgeslagen waarde met 100 voor weergave en plakt er een procentteken bij — handig voor velden die intern 0–1 opslaan maar als 0–100% moeten verschijnen.


Interactie met de Odoo ORM

Bij het lezen levert een Float-veld een Python float op, of False als er geen waarde is en er geen default bestaat. Bij schrijven accepteert het integers, floats of False. De ORM past de precisie uit digits toe bij het opslaan.


Belangrijk voor ontwikkelaars: vergelijk Float-waarden niet met == in Python. Door karakteristieken van floating-point rekenkunde kunnen ogenschijnlijk gelijke waarden toch verschillen. Gebruik in plaats daarvan float_compare en float_is_zero uit odoo.tools.float_utils, die rekening houden met de gedefinieerde precisie.

Zakelijke toepassingen


Het Float-veld komt in bijna elk Odoo-module voor. Hieronder vijf concrete voorbeelden uit echte bedrijfsprocessen.


Verkoop: kortingspercentages op orderregels

Het ingebouwde discount-veld op sale.order.line is een Float. Wanneer een verkoper 15% korting invoert, slaat Odoo 15.0 op en gebruikt dat in prijsberekeningen, offertes en facturen. Juist omgaan met kortingen is cruciaal voor klantcommunicatie en margeanalyse.


Voorraad: productgewichten en -volumes

Producten hebben native velden voor weight en volume, beide Floats. Een product van 2,5 kg of 0,003 m3 vereist decimalen — een Integer volstaat hier niet. Deze waarden beïnvloeden verzendkostberekeningen en integraties met vervoerders: onnauwkeurige gewichten leveren verkeerde tarieven op.


Boekhouding: belastingtarieven

Btw-tarieven in account.tax zijn Float-velden. Een standaard 21% wordt als 21.0 opgeslagen, een verlaagd tarief als 6.0 of 5.5. De boekhoudmotor gebruikt deze waarden bij elke factuur en leveranciersrekening; kleine afrondingsverschillen kunnen zich over honderden transacties opstapelen en rapporten vertekenen.


Productie: hoeveelheden in stuklijsten

In Manufacturing is de benodigde hoeveelheid per component in een stuklijst een Float. Een recept kan 0,75 liter of 2,5 kg vereisen — Floats verwerken zulke fracties zonder problemen. Integervelden zouden afronden en productieafwijkingen introduceren.


Aankoop: prijsfactoren en leveranciersmarges

Bij prijslijsten en marge-instellingen gebruikt men Floats om multipliers en factoren te bewaren: een factor 1.25 (25% markup) of 0.85 (15% korting) zijn typische voorbeelden. Die waarden voeden geautomatiseerde prijsberekeningen in bestellingen.

Een Float-veld aanmaken of aanpassen


Er zijn drie gebruikelijke manieren om een Float-veld toe te voegen aan een Odoo-model, afhankelijk van je technische situatie.

Via Odoo Studio (geen code)

Odoo Studio is de low-code tool waarmee je zonder te programmeren velden toevoegt. Stappen:


  1. Open Odoo Studio vanuit het hoofdmenu.
  2. Ga naar het formulier waar je het veld wil toevoegen.
  3. Sleep een Decimal Number-veld uit de veldkiezer naar het formulier.
  4. Stel label, standaardwaarde en aantal decimalen in via het eigenschappenpaneel.
  5. Bewaar en sluit Studio.

Studio maakt het veld met een x_studio_-prefix en voegt het automatisch aan de view toe, zonder dat je zich zorgen moet maken over de databank. Dit is vaak de snelste route voor gebruikers die zelf kleine uitbreidingen willen doen.


Via Python in een custom module

Voor ontwikkelaars definieer je Float-velden in Python binnen modules — de aanbevolen methode voor productiedispensabele, versiebeheerbare aanpassingen:


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

Na het toevoegen van het veld zet je het in de bijbehorende XML-view zodat het in de interface verschijnt. Odoo regelt de databasekolom bij installatie of upgrade automatisch — dit is de standaard werkwijze voor serieuze aanpassingen.


Via de XML-RPC API

Als je Odoo automatisch configureert via scripts of een remote proces, kun je Float-velden ook via XML-RPC aanmaken:

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

Het attribuut state: 'manual' geeft aan dat het veld handmatig is aangemaakt in plaats van door een module — de juiste instelling voor velden uit Studio of API. Decimale precisie voor via API aangemaakte Floats regel je via de Decimal Accuracy-instellingen in het technische menu. Dit is een aanpak die ook in geautomatiseerde configuraties gebruikt wordt.

Aanbevolen werkwijzen


1. Gebruik benoemde precisiegroepen voor standaardwaarden

In plaats van digits=(6, 2) vast te coderen, verwijs naar een precisiegroep zoals 'Product Price' of 'Product Unit of Measure'. Zo kunnen beheerders de precisie via de UI aanpassen en blijven je velden consistent met de native velden.


2. Gebruik Monetary voor bedragen in een valuta, niet Float

Dit is wellicht het belangrijkste advies. Monetary is bedoeld voor geldbedragen: het koppelt aan een valuta-veld op hetzelfde model, handelt afronding per valuta correct af en werkt in multi-currency omgevingen. Float gebruiken voor factuur- of verkoopprijzen veroorzaakt afrondingsproblemen en verstoort multicurrency-rapportage.


3. Stel altijd een standaardwaarde in

Gebruik default=0.0 voor numerieke velden die bij nieuw record op nul moeten starten. Zonder default is de waarde False (NULL), wat onverwachte fouten kan geven in berekende velden of Python-methodes die een numerieke waarde verwachten.


4. Kies de juiste group_operator voor rapporten

Als het veld een hoeveelheid of bedrag is dat je wil optellen in rapporten, zet group_operator='sum'. Voor percentages of verhoudingen waar een gemiddelde logischer is, kies 'avg'. Dit zorgt ervoor dat draaitabellen en grafieken relevante aggregaties tonen.


5. Leg je conventies voor percentages vast

Wees duidelijk of een percentageveld de schaal 0–100 gebruikt (zoals discount: 15.0 voor 15%) of 0–1 (zoals 0.15 voor 15%). Gemengde conventies leiden tot stil zwijgende rekenfouten die later moeilijk opspoorbaar zijn.


Veelvoorkomende valkuilen


Float gebruiken voor monetaire bedragen

Float-velden bevatten geen valuta-informatie. Een waarde van 1500 kan euro, dollar of iets anders betekenen. In een multi-currency setup leidt dit tot foutieve totalen in financiële rapporten — gebruik daarom het Monetary-veld voor bedragen met valuta.


Het niet instellen van digits

Als je geen digits opgeeft, hanteert Odoo standaard twee decimalen. Dat is vaak ok voor prijzen, maar niet voor velden die vier of meer decimalen nodig hebben, zoals wisselkoersen of conversiefactoren. Een factor die onterecht naar 2 decimalen wordt afgerond, geeft cumulatieve afwijkingen over alle transacties.


Float-vergelijkingen met == in Python

Door de aard van floating-point rekenen kunnen ogenschijnlijk identieke waarden niet gelijk blijken bij ==. Bijvoorbeeld 0.1 + 0.2 == 0.3 geeft False. Gebruik float_compare(value1, value2, precision_digits=2) en float_is_zero(value, precision_digits=2) uit odoo.tools.float_utils voor betrouwbare vergelijkingen.


Float gebruiken waar Integer beter is

Als een veld altijd hele getallen bevat — tellingen, aantallen pakketten, volgordes — gebruik dan Integer. Technisch werkt Float ook, maar het nodigt uit tot decimalen waar die geen zin hebben en verwart gebruikers.


Niet omgaan met False-waarden in compute-methoden

Een Float zonder default levert False (niet 0.0) als er geen waarde is. Bij berekeningen controleer je daarom altijd op False, of geef het veld default=0.0. Zo vermijd je TypeError-excepties die pas bij echte data naar boven komen.

Slotwoord


Het Float-veld is een fundamenteel bouwblok in Odoo. Het verwerkt decimalen voor prijzen, hoeveelheden, tarieven en maten, en werkt betrouwbaar wanneer je de juiste precisie en defaults toepast.


Belangrijkste aandachtspunten: gebruik benoemde precisiegroepen voor standaardwaarden, gebruik Monetary voor valuta, zet altijd een default en documenteer je conventies voor percentages. Deze gewoontes voorkomen de meeste datakwaliteitsproblemen voordat ze in productie problemen geven.

Of je nu velden toevoegt met Odoo Studio, een custom Python-module schrijft of je datamodel via de ORM of XML-RPC programmeert, correcte toepassing van Float-velden vanaf het begin zorgt voor een schonere en stabielere implementatie.

Bij Dasolo begeleiden we bedrijven met implementatie, maatwerk en optimalisatie van Odoo over alle afdelingen heen. Of je nu hulp nodig hebt bij een helder datamodel, het toevoegen van velden aan formulieren of het bouwen van een volledig modulepakket — ons team ondersteunt je graag. Contacteer ons en laten we jouw Odoo-project bespreken.

Float Field in Odoo: De Complete Gids
Dasolo 6 maart 2026
Deel deze post
Aanmelden om een reactie achter te laten