Postgresql 使用digits选项声明字段浮点时读回的数据不一致
我正在使用OdooV8,发现了一个有趣的行为 当我用数字声明浮点时:Postgresql 使用digits选项声明字段浮点时读回的数据不一致,postgresql,openerp,precision,odoo-8,floating,Postgresql,Openerp,Precision,Odoo 8,Floating,我正在使用OdooV8,发现了一个有趣的行为 当我用数字声明浮点时: pension_unit_rate = fields.Float(digits=(16,4)) 放 <field name="pension_unit_rate" widget="progressbar"/> “value”中存储的数据似乎是0.060000000000000005,这与数据库中现有的数据不一致 这是使用“数字”选项时由数字数据类型引起的吗?是否有解决方法或修复方法 提前感谢~找到了答案 问题在
pension_unit_rate = fields.Float(digits=(16,4))
放
<field name="pension_unit_rate" widget="progressbar"/>
“value”中存储的数据似乎是0.060000000000000005,这与数据库中现有的数据不一致
这是使用“数字”选项时由数字数据类型引起的吗?是否有解决方法或修复方法
提前感谢~找到了答案
问题在于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
如果您想要精确的数字,首先不应该使用
float
:
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