要想精确运算用 decimal
参考下这文档吧,这个跟浮点数类型有关。
>>> format(0.825, '.17f')
'0.82499999999999996'
浮点数的0.825其实是用’0.82499999999999996’表示的。。。所以四舍五入就成了0.82
老师,我看了文档中关于round的介绍,但是这还是不能解决我这条用例会执行失败的问题呢,从用例预期结果的角度是没错的,具体代码如何写才能达到验证这条用例的效果呢?
可以用这个办法去判断浮点数是否接近。
>>> import math
>>> a = 5.0
>>> b = 4.99998
>>> math.isclose(a, b, abs_tol=0.00003)
True
>>> math.isclose(a, b, abs_tol=0.00001)
False
或者用这个获得四舍五入
>>> Decimal('13.825').quantize(Decimal("0.00"), rounding=decimal.ROUND_HALF_UP)
Decimal('13.83')
>>> Decimal(13.825).quantize(Decimal("0.00"), rounding=decimal.ROUND_HALF_UP)
Decimal('13.82')
需要注意的是这两个表达方式的区别
>>> Decimal('13.825')
Decimal('13.825')
>>> Decimal(13.825)
Decimal('13.824999999999999289457264239899814128875732421875')
Decimal(13.825)变化的原因是13.825首先被python变成了浮点数,这个时候再传给Decimal就已经不准了。所以要用字符串传递,才是真正的精准数字 Decimal(‘13.825’)