Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/postgresql/9.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgresql 使用digits选项声明字段浮点时读回的数据不一致_Postgresql_Openerp_Precision_Odoo 8_Floating - Fatal编程技术网

Postgresql 使用digits选项声明字段浮点时读回的数据不一致

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,这与数据库中现有的数据不一致 这是使用“数字”选项时由数字数据类型引起的吗?是否有解决方法或修复方法 提前感谢~找到了答案 问题在

我正在使用OdooV8,发现了一个有趣的行为

当我用数字声明浮点时:

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