percentage
The percentage widget shows a stored fraction as percent: 0.15 displays as 15%, and typing 15 stores 0.15. One convention, consistently applied on both directions.
August 11, 2026Updated August 11, 20265 min read
| Studio name | Percentage |
|---|---|
| Technical name | percentage |
| Field types | float, integer |
| Views | form, list |
| Module | web, present in every Odoo database |
| Used in core | 38 occurrences across 21 modules, margins, rates and probabilities throughout |
| Versions | Odoo 20.0, Odoo 19.0, Odoo 18.0, Odoo 17.0, Odoo 16.0 |
| No-code setup | Yes, via Odoo Studio (Enterprise) |
| Alternatives | progressbar, percentpie, float, monetary |
What the Percentage widget does
What this means for your team
Setting it up in Odoo Studio (no code)
What Studio cannot do here
Supported options in Odoo 19
| Option | Type | What it does |
|---|---|---|
digits | array [width, decimals] | Decimal precision of the displayed percent, e.g. [16, 1] for 12.5%. Accepted as an option or as a digits attribute; the attribute wins when both are set, per extractProps. |
The attribute wins over the option when both are set: extractProps checks attrs.digits first and only falls back to options.digits. Same dual path, same precedence as the statinfo widget.
Working examples
One convention, three places
Version compatibility
| Version | Status | Notes |
|---|---|---|
| Odoo 20.0 | In development | Not released. The development branch shows no behavior changes; see below. |
| Odoo 19.0 | Verified | Verified against the shipped source and tested on a clean database. |
| Odoo 18.0 | Verified | Same behavior. No XML changes needed. |
| Odoo 17.0 | Verified | Same behavior. No XML changes needed. |
| Odoo 16.0 | Verified | Same behavior. No XML changes needed. |
Upgrade note. Unchanged from Odoo 16 through 19; views carry over. Data conventions survive upgrades by definition, so any 15-versus-0.15 confusion predates the migration that revealed it.
What is changing in Odoo 20
Common problems and fixes
| Symptom | Cause and fix |
|---|---|
| Field shows 1500% instead of 15% | The stored value is 15: something wrote whole percents into a fraction field, usually an import. Fix the pipeline to write 0.15, and migrate the existing data once. |
| User typed 0.15 and got 0.15% | Typing means percent in this widget; 0.15 typed is 0.0015 stored. Type 15. One line in training covers it. |
| Too many or too few decimals | No digits configured, or the option is being overridden by a digits attribute. Set digits explicitly; remember the attribute wins over the option. |
| % symbol vanishes while editing | By design: editing shows the clean number. Nothing to fix; the symbol returns on blur. |
| Computed results are 100x off | Model code divides or multiplies by 100 around an already-fraction value. Audit the compute: with fractions stored, multiply directly. |
Percentage widget vs the alternatives
| Widget | Best for | Key difference |
|---|---|---|
percentage | Rates users read and type: margins, probabilities, discounts | Fraction stored, percent displayed and parsed, symbol hidden while editing |
| progressbar | Progress toward 100% shown as a bar | Visual bar; reads the value, not focused on typing |
percentpie | A percentage stat in a smart button | Small pie gauge for the button box |
float | Plain numbers without percent semantics | No conversion, no symbol |
| monetary | Amounts of money | Currency-aware formatting instead of percent |
Frequently asked questions
How does Odoo store percentage fields?+
Why does my percentage show as 1500%?+
How do I control decimals on a percentage field?+
What should users type into a percentage field?+
Percentage or progressbar, which widget?+
Does the widget work on integer fields?+
Margins and rates you can trust in every report?
Percent bugs are convention bugs: one import writing 15 instead of 0.15 poisons dashboards quietly. We set the conventions, fix the pipelines and build the computed fields on top, on Odoo 16 through 19.
Book a free consultation