我正在使用Odoo v8并发现了一个有趣的行为。
当我用数字声明Float时:
pension_unit_rate = fields.Float(digits=(16,4))
并放
<field name="pension_unit_rate" widget="progressbar"/>
在其视图定义和输入数据0.06进入记录并保存,数据在postgresql数据库中正确存储为0.06。
但是当我单击“编辑”按钮时,从数据库读回的数据为0.060000000000000005。
我使用pgAdmin并使用简单的代码检查验证了数据库中的数据是否正确(0.06):
instance.web.form.FieldProgressBar = instance.web.form.AbstractField.extend({
template: 'FieldProgressBar',
render_value: function() {
this.$el.progressbar({
value: this.get('value') || 0,
disabled: this.get("effective_readonly")
});
**console.log(this.get('value'))**
var formatted_value = instance.web.format_value(this.get('value') || 0, { type : 'float' });
this.$('span').html(formatted_value + '%');
}});
似乎存储在'value'中的数据是0.060000000000000005,这与数据库中存在的数据不一致。
使用数字选项时,这是由数字数据类型引起的吗?有解决方法或修复方法吗?
提前致谢〜
答案 0 :(得分:0)
找到答案。
问题在于fields.py中Float字段定义中的旧版本convert_to_cache函数。更新代码修复了问题。
def convert_to_cache(self, value, record, validate=True):
# apply rounding here, otherwise value in cache may be wrong!
value = float(value or 0.0)
if not validate:
return value
digits = self.digits
return float_round(value, precision_digits=digits[1]) if digits else value