odoo12 price unit 能否实现网页显示2位精度, 数据库实际存储6位小数
可以做到,而且是 Odoo 里非常常见的需求:
前端界面显示 2 位小数,但数据库中保持 6 位精度存储 —— 不影响后台计算。
下面给你详细说明 三种可行方式,任选一种即可。
✅ 方案 1:修改字段 widget,只改变显示精度(推荐)
Odoo 12 的单价字段 price_unit 是 fields.Float,其真实精度受 decimal.precision 控制。
如果你的数据库需要存 6 位小数,但界面只显示 2 位小数,你可以在 XML 视图中单独指定 widget:
XML 示例(只改变显示精度为 2 位)
<field name="price_unit" widget="float" options="{'precision': 2}"/>
✔ 结果
- 界面显示:2 位精度,例如
105.12 - 数据库存储:保持 6 位,例如
105.123456 - 不会影响销售、库存等计算。
✅ 方案 2:修改 decimal.precision 配置(数据库精度维持不变,显示精度可独立设定)
Odoo 通过 decimal.precision 控制某些类别的显示精度,例如 Product Price。
你可以把 Product Price 的显示精度改成 2 位,用于界面显示。
步骤:
- 打开 设置 → 技术 → 数据库结构 → 十进制精度(Decimal Precision)
- 找到 Product Price
- 将 Digits 改为:
2
✔ 结果
- Odoo 界面所有价格显示都变成 2 位
- 数据库字段仍然保存 6 位小数(不会被截断)
✅ 方案 3:保持后台精度 6 位(decimal.precision),但通过 round 显示
如果你只想控制界面某些位置显示 2 位,可以使用:
XML?
<field name="price_unit" widget="monetary" options="{'currency_field': 'currency_id'}"/>
货币 widget 会自动按货币精度显示(通常为 2 位)。
📌 重要说明:Odoo 12 的 Float 字段支持无限小数,只要 decimal.precision 设置够大
即使你显示 2 位,数据库依然可以存:
105.123456
只要 Product Price 的精度(decimal.precision)≥6。
🔍 总结
| 方案 | 显示精度 | 数据库存储精度 | 推荐度 |
|---|---|---|---|
| 修改视图 widget | 2 | 6 | ⭐⭐⭐⭐⭐ 最灵活,仅影响单个表单 |
| 修改 decimal precision | 2 | 6 | ⭐⭐⭐☆ 影响全局价格显示 |
| 使用 monetary widget | 按货币精度(通常2位) | 6 | ⭐⭐⭐ 适合订单场景 |
如果你愿意,我还可以:
✅ 给你写完整的模块 override 代码
✅ 给你修改 sale.order.line 的专用视图
✅ 设置 price_unit 与 subtotal 都显示 2 位
你希望哪一种?
本文来自博客园,作者:那时一个人,转载请注明原文链接:https://www.cnblogs.com/qianxunman/p/19330795

浙公网安备 33010602011771号