所以我想把我的代码从Odoo12转换成Odoo13,我被这部分卡住了:
#digits_rounding_precision here is 0.0
digits_rounding_precision = self.currency_id.rounding
if float_is_zero(self.residual_amount, precision_rounding=digits_rounding_precision):
self.reconciled = True
else:
self.reconciled = False我得到了这种类型的错误:
precision_rounding must be positive, got %s" % precision_rounding
AssertionError: precision_rounding must be positive, got 0.0但是在Odoo12上,值为0.0就可以了,请帮帮我
发布于 2021-07-15 17:23:03
在看了Odoo的源代码后,我发现了这个(在Odoo 13.0及更高版本中):
https://github.com/odoo/odoo/blob/13.0/odoo/tools/float_utils.py#L25
def _float_check_precision(precision_digits=None, precision_rounding=None):
assert (precision_digits is not None or precision_rounding is not None) and \
not (precision_digits and precision_rounding),\
"exactly one of precision_digits and precision_rounding must be specified"
assert precision_rounding is None or precision_rounding > 0,\
"precision_rounding must be positive, got %s" % precision_rounding
if precision_digits is not None:
return 10 ** -precision_digits
return precision_rounding而在Odoo 12.0中是这样的:
def _float_check_precision(precision_digits=None, precision_rounding=None):
assert (precision_digits is not None or precision_rounding is not None) and \
not (precision_digits and precision_rounding),\
"exactly one of precision_digits and precision_rounding must be specified"
if precision_digits is not None:
return 10 ** -precision_digits
return precision_rounding所以看起来他们添加了额外的条件,precision_rounding不能再等于零了-所以你必须指定正数。
简单的解决方法是向它添加一个小数字,以确保它是正数。像0.01这样的东西应该没问题,因为Odoo声明precision_rounding可以是浮动的。
"""
:param int precision_digits: number of fractional digits to round to.
:param float precision_rounding: decimal number representing the minimum
non-zero value at the desired precision (for example, 0.01 for a
2-digit precision).
:param float value: value to compare with the precision's zero
:return: True if ``value`` is considered zero
"""https://stackoverflow.com/questions/68389829
复制相似问题