Se rendre au contenu

Champ Flottant dans Odoo : Le Guide Complet

Un guide pratique sur le champ Float dans le modèle de données Odoo, de l'utilisation de base au contrôle de la précision et à la personnalisation technique.
6 mars 2026 par
Champ Flottant dans Odoo : Le Guide Complet
Dasolo
| Aucun commentaire pour l'instant

Introduction


Le champ Float est l'un des types de champs les plus fréquemment utilisés dans Odoo lorsque vos données impliquent des nombres décimaux. Les prix unitaires, les poids des produits, les pourcentages de remise, les taux de taxe, les facteurs de conversion dans les nomenclatures - tous ces éléments sont généralement stockés sous forme de champs Float dans le modèle de données Odoo.


À première vue, cela ressemble à une simple saisie numérique. Mais il y a plusieurs choses à savoir sur la façon dont il gère la précision, son comportement dans les rapports et les agrégations, et quand vous devriez utiliser un autre type de champ à la place.


Ce guide couvre ce que le champ Float stocke, comment il se comporte dans le cadre Odoo, comment le créer et le personnaliser en utilisant Odoo Studio ou Python, et des cas d'utilisation réels dans les domaines des ventes, de l'inventaire et de la comptabilité.

Qu'est-ce que le champ Float dans Odoo


Dans l'ORM Odoo, le champ Float stocke des nombres décimaux. Il correspond à une colonne double precision dans PostgreSQL, qui fournit jusqu'à 15 chiffres significatifs de précision. Pour la plupart des cas d'utilisation en entreprise, c'est bien plus que ce dont vous avez besoin.


Du point de vue de l'utilisateur, un champ Float apparaît comme une entrée numérique dans les vues de formulaire. Le nombre de décimales affichées est contrôlé par le paramètre digits que vous définissez sur le champ. Dans les vues en liste, les valeurs Float s'affichent avec la même précision et sont alignées à droite par défaut. Dans les tableaux croisés et les graphiques, les champs Float participent à des agrégations comme la somme, la moyenne ou le maximum.


Voici à quoi cela ressemble dans une définition de modèle Python :

from odoo import fields, models

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

    custom_margin = fields.Float(
        string='Marge Personnalisée',
        digits=(5, 2),
        default=0.0,
    )

Le paramètre digits est un tuple. Le premier nombre est le nombre total de chiffres significatifs, le second est le nombre de décimales. Donc (5, 2) permet jusqu'à cinq chiffres significatifs avec deux décimales.

Vous pouvez également référencer un groupe de précision nommé plutôt que de coder en dur les chiffres :


price_premium = fields.Float(
    string='Prix Supplémentaire',
    digits='Prix du Produit',
)

Odoo dispose de plusieurs groupes de précision intégrés gérés sous Paramètres > Technique > Structure de la Base de Données > Précision Décimale. Les principaux incluent Prix du Produit, Unité de Mesure du Produit, Remise, et Poids du Stock. L'utilisation de groupes de précision signifie que les utilisateurs peuvent ajuster la précision décimale depuis l'interface sans aucun changement de code.


Dans Odoo Studio, le champ Float est étiqueté Nombre Décimal. Lorsqu'il est créé via Studio, il utilise la précision par défaut à moins que vous ne le configuriez autrement dans le panneau des propriétés du champ. Cela en fait l'un des champs Odoo Studio les plus accessibles pour les utilisateurs professionnels qui ont besoin d'étendre les formulaires sans support de développeur.

Comment fonctionne le champ


Lorsque vous définissez un champ Float dans Odoo, le framework gère automatiquement la création de la colonne dans la base de données lors de l'installation ou de la mise à niveau du module. Aucun script SQL ou de migration manuel n'est nécessaire.


Le paramètre digits contrôle deux choses à la fois : comment les valeurs sont affichées dans l'interface, et comment elles sont arrondies avant d'être stockées. Si vous définissez digits=(6, 2) et qu'un utilisateur entre 3.14159, Odoo arrondit et stocke 3.14. Cet arrondi se produit au niveau de l'ORM, pas seulement dans la couche d'affichage.


Attributs Clés du Champ

Voici les propriétés les plus importantes que vous pouvez configurer sur un champ Float dans le framework Odoo :

  • chiffres : Un tuple comme (6, 2) ou une chaîne de groupe de précision nommée. Contrôle à la fois la précision d'affichage et de stockage.
  • obligatoire : Rend le champ obligatoire. Un champ Float avec une valeur de 0.0 passera la vérification requise, ce qui peut ne pas toujours être le comportement souhaité.
  • par défaut : Valeur par défaut lors de la création d'un nouvel enregistrement. Définir default=0.0 garantit que le champ a toujours une valeur numérique plutôt que False.
  • calculer : Lie une méthode Python qui calcule dynamiquement la valeur du champ. Utile pour les valeurs dérivées comme les marges ou les résultats de conversion dans les champs calculés d'odoo.
  • stockage : Lorsqu'il est utilisé avec calculer, enregistre la valeur calculée dans la base de données afin qu'elle puisse être recherchée, filtrée et groupée.
  • opérateur_de_groupe : Contrôle comment le champ est agrégé dans les vues pivot et graphique. Les valeurs courantes sont 'somme', 'moyenne', 'min', et 'max'. Les champs Float par défaut à 'somme'.
  • copie : Contrôle si la valeur est copiée lors de la duplication d'un enregistrement. Par défaut à True.

Comment cela apparaît dans les vues

Dans les vues de formulaire, un champ Float s'affiche comme une entrée numérique. L'affichage respecte la locale de l'utilisateur pour les séparateurs décimaux. Dans les vues de liste, les valeurs Float sont alignées à droite par défaut. Dans les vues de recherche, vous pouvez filtrer par valeurs Float en utilisant des opérateurs de comparaison numérique.


Vous pouvez appliquer des widgets aux champs Float dans les vues. Le widget pourcentage, par exemple, multiplie la valeur stockée par 100 pour l'affichage et ajoute un signe de pourcentage, ce qui est utile pour les champs stockant des valeurs dans la plage 0-1. C'est un modèle courant dans le développement Odoo lors de la manipulation de taux et de facteurs.


Interaction avec l'ORM Odoo

Lire un champ Float vous donne un float Python, ou False si le champ n'a pas été défini et qu'aucune valeur par défaut n'est définie. Écrire dans un champ Float accepte des entiers, des floats ou False. L'ORM applique la précision de chiffres au moment de l'enregistrement.


Une note importante pour le développement Odoo : ne comparez pas les valeurs Float avec == en Python. En raison de la façon dont l'arithmétique à virgule flottante fonctionne au niveau matériel, des valeurs qui semblent égales peuvent ne pas l'être. Utilisez float_compare et float_is_zero de odoo.tools.float_utils à la place, qui respectent la précision des champs définie dans votre modèle de données Odoo.

Cas d'utilisation en entreprise


Le champ Float apparaît dans presque tous les modules d'une implémentation Odoo. Voici cinq exemples pratiques tirés de véritables flux de travail commerciaux.


Ventes : Pourcentages de remise sur les lignes de commande

Le champ natif discount sur sale.order.line est un champ Float. Lorsqu'un représentant commercial applique une remise de 15 %, Odoo stocke 15.0 et l'applique au calcul du prix unitaire. Cette valeur se retrouve dans les devis imprimés et les factures clients, et elle participe aux rapports de marge. Obtenir les remises correctes est important tant pour la communication avec le client que pour l'analyse de la rentabilité de l'entreprise.


Inventaire : Poids et volumes des produits

Les produits dans Odoo ont des champs natifs weight et volume, tous deux de type Float. Un produit pesant 2,5 kg ou occupant 0,003 m3 nécessite une précision décimale qu'un champ Integer ne peut tout simplement pas fournir. Ces valeurs alimentent directement les calculs des coûts d'expédition et les intégrations avec les transporteurs. Si vous utilisez Odoo avec un connecteur de livraison, des valeurs Float précises en poids et en volume déterminent le tarif d'expédition renvoyé par l'API du transporteur.


Comptabilité : Taux d'imposition

Les taux d'imposition sur account.tax sont des champs Float. Une TVA standard de 21 % est stockée sous la forme 21.0, un taux réduit pourrait être 6.0 ou 5.5. Le moteur de comptabilité Odoo lit ces valeurs pour calculer les montants de taxe sur chaque facture et chaque facture fournisseur. La précision est importante ici car de petites différences d'arrondi peuvent s'accumuler sur des centaines de transactions et provoquer des écarts dans les rapports fiscaux.


Fabrication : Quantités de la liste des matériaux

Dans la fabrication Odoo, la quantité de chaque composant dans une liste de matériaux est un champ Float. Une recette peut nécessiter 0,75 litres d'un ingrédient liquide ou 2,5 kg d'une matière première. Les champs Float gèrent naturellement ces quantités fractionnaires. Utiliser un champ Integer dans ce contexte forcerait l'arrondi et introduirait des erreurs de production qui s'accumulent avec le temps.


Achats : Facteurs de prix et marges des fournisseurs

Lors de la configuration des listes de prix des fournisseurs ou des règles de majoration, les champs Float stockent les multiplicateurs et les marges. Un facteur de marge de 1,25 (25 % de majoration) ou un facteur de remise de 0,85 (15 % de réduction sur le prix catalogue) sont des valeurs typiques dans la logique de tarification des achats. Ces valeurs Float alimentent les calculs de prix automatisés sur les commandes d'achat et aident les équipes d'achat à maintenir des prix cohérents entre les fournisseurs.

Créer ou personnaliser le champ Float


Il existe trois principales façons d'ajouter un champ Float à un modèle Odoo, en fonction de votre contexte technique et de votre approche de déploiement.

Utiliser Odoo Studio (Sans Code)

Odoo Studio est l'outil de personnalisation low-code intégré. Pour ajouter un champ Float sans écrire de code :


  1. Ouvrez Odoo Studio depuis le menu principal.
  2. Naviguez vers le formulaire où vous souhaitez ajouter le champ.
  3. Faites glisser un champ Nombre Décimal depuis le sélecteur de champs vers le formulaire.
  4. Définissez l'étiquette, la valeur par défaut et le nombre de décimales dans le panneau des propriétés.
  5. Enregistrez et fermez Studio.

Studio crée le champ avec un préfixe x_studio_ et l'ajoute automatiquement à la vue du formulaire. Aucun travail de base de données n'est nécessaire de votre part. C'est l'une des façons les plus accessibles de créer des champs dans Odoo pour les utilisateurs qui souhaitent une personnalisation d'Odoo sans complexité technique.


Utiliser Python dans un Module Personnalisé

Pour les développeurs construisant des modules Odoo, les champs Float sont définis directement en Python. C'est l'approche recommandée pour tout développement Odoo qui doit être contrôlé par version et déployé sur plusieurs environnements :


from odoo import fields, models

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

    x_credit_limit = fields.Float(
        string='Limite de Crédit',
        digits=(12, 2),
        default=0.0,
        help='Solde maximum autorisé pour ce client.',
    )

Après avoir ajouté le champ au modèle, incluez-le dans le XML de la vue pertinente afin qu'il apparaisse dans l'interface. Odoo gère automatiquement la colonne de la base de données lors de l'installation ou de la mise à niveau du module. C'est l'approche standard du guide des développeurs Odoo pour tout travail de personnalisation Odoo sérieux.


Utilisation de l'API XML-RPC

Si vous gérez des personnalisations Odoo de manière programmatique, par exemple via un script de déploiement ou un carnet de configuration à distance, vous pouvez créer des champs Float via l'API XML-RPC :

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

La valeur state: manual indique à Odoo que ce champ a été créé manuellement plutôt que par un module, ce qui est le paramètre correct pour les champs créés via Studio ou l'API. La précision décimale pour les champs Float créés par l'API est gérée via les paramètres de Précision Décimale dans le menu technique. C'est l'approche utilisée par Dasolo pour la création de champs à distance dans le cadre de scripts de configuration Odoo automatisés.

Meilleures pratiques


1. Utilisez des groupes de précision nommés pour les valeurs standard

Au lieu de coder en dur digits=(6, 2), référencez un groupe de précision comme 'Prix du Produit' ou 'Unité de Mesure du Produit'. Cela permet aux utilisateurs ayant un accès technique d'ajuster la précision depuis l'interface sans modifications de code, et cela aligne vos champs personnalisés avec la même précision que les champs natifs Odoo dans le même contexte.


2. Utilisez Monétaire pour les montants en devise, pas Float

C'est le point le plus important de cette liste. Le champ Monétaire est spécifiquement conçu pour les montants qui ont une devise. Il est lié à un champ de devise sur le même modèle, gère l'arrondi selon les règles de la devise, et fonctionne correctement dans des environnements multi-devises. Utiliser un champ Float pour les montants de factures ou les prix de vente entraînera des incohérences d'arrondi et perturbera les rapports multi-devises.


3. Toujours définir une valeur par défaut

Définissez default=0.0 pour les champs numériques qui doivent commencer à zéro. Sans valeur par défaut, la valeur du champ est False (null dans la base de données) jusqu'à ce que l'utilisateur la remplisse. Cela peut entraîner des erreurs inattendues dans les champs calculés ou les méthodes Python qui supposent qu'une valeur numérique est toujours présente.


4. Définir group_operator pour les rapports

Si un champ Float représente une quantité ou un montant qui a du sens à additionner dans les rapports, ajoutez group_operator='sum'. S'il représente un taux ou un pourcentage où la moyenne a plus de sens, utilisez group_operator='avg'. Bien faire cela garantit que les tableaux croisés dynamiques et les vues graphiques agrègent vos données de manière significative, ce qui est très important dans les champs de base de données Odoo utilisés pour l'analyse.


5. Documentez vos conventions de pourcentage

Si un champ Float stocke un pourcentage, soyez explicite sur le fait qu'il utilise une plage de 0 à 100 (comme le champ natif discount : 15.0 pour 15%) ou une plage de 0 à 1 (comme certains champs de marge : 0.15 pour 15%). Mélanger ces conventions dans un modèle de données produit des erreurs de calcul silencieuses qui sont très difficiles à retracer par la suite.


Pièges courants


Utilisation de Float pour les montants monétaires

Les champs Float ne portent aucune information monétaire. Un champ Float affichant 1500 pourrait être en euros, en dollars ou autre. Dans une configuration Odoo multi-devises, cela conduit à des totaux incorrects sur les rapports financiers. Utilisez le type de champ Monetary pour tout montant ayant une devise.


Ne pas définir le paramètre digits

Sans digits explicite, Odoo applique une précision Float par défaut de 2 décimales. Cela convient pour les prix mais pas pour les champs qui nécessitent 4 ou 6 décimales, tels que les taux de change ou les facteurs de conversion d'unités. Un facteur de conversion arrondi silencieusement à 2 décimales produira des erreurs cumulatives dans chaque transaction qui l'utilise.


Comparer des valeurs Float avec == en Python

En raison de la façon dont les nombres à virgule flottante fonctionnent au niveau matériel, deux valeurs Float qui semblent identiques peuvent ne pas être égales lorsqu'elles sont comparées avec ==. Par exemple, 0.1 + 0.2 == 0.3 évalue à False en Python. Utilisez float_compare(value1, value2, precision_digits=2) et float_is_zero(value, precision_digits=2) de odoo.tools.float_utils pour des comparaisons fiables. C'est un point commun dans tout tutoriel technique Odoo sur le sujet.


Utiliser Float quand Integer est le bon choix

Si un champ contient toujours des nombres entiers, comme un compte, un nombre de colis ou un numéro de séquence, utilisez plutôt un champ Integer. Les champs Float pour les nombres entiers ne sont pas techniquement erronés, mais ils créent une confusion inutile et incitent les utilisateurs à entrer des valeurs décimales là où aucune n'a de sens dans le contexte commercial.


Ne pas gérer les valeurs False dans les méthodes de calcul

Un champ Float sans valeur par défaut renvoie False (pas 0.0) lorsque aucune valeur n'a encore été définie. Si vous effectuez des calculs basés sur des champs Float, vérifiez toujours la présence de False avant de faire des opérations arithmétiques, ou ajoutez simplement default=0.0 à la définition du champ. Cela évite les exceptions TypeError dans les méthodes de calcul qui ne se manifestent que lors de scénarios de données réelles.

Conclusion


Le champ Float est un élément fondamental du modèle de données Odoo. Il gère les nombres décimaux pour les prix, les quantités, les taux et les mesures, et il le fait de manière fiable lorsqu'il est configuré avec la bonne précision et les bonnes valeurs par défaut.


Les principales choses à garder à l'esprit : utilisez des groupes de précision nommés pour les valeurs standard, utilisez Monétaire au lieu de Float pour les montants en devises, définissez toujours une valeur par défaut et documentez vos conventions pour les champs de pourcentage. Ces habitudes empêchent les problèmes de qualité des données les plus courants avant qu'ils n'aient la chance de causer des problèmes en production.

Que vous ajoutiez des champs via Odoo Studio, que vous écriviez un module Python personnalisé ou que vous gériez votre modèle de données de manière programmatique via l'ORM Odoo ou l'API XML-RPC, obtenir les champs Float correctement dès le départ permet une mise en œuvre plus propre et plus fiable dans l'ensemble.

Chez Dasolo, nous aidons les entreprises à mettre en œuvre, personnaliser et optimiser Odoo dans tous les départements. Que vous ayez besoin d'aide pour concevoir un modèle de données propre, ajouter des champs personnalisés à vos formulaires ou construire un module Odoo complet à partir de zéro, notre équipe est là pour vous soutenir. Contactez-nous et parlons de votre projet Odoo.

Champ Flottant dans Odoo : Le Guide Complet
Dasolo 6 mars 2026
Partager cet article
Se connecter pour laisser un commentaire.