pytest断言两个浮点数之和保留两位小数,为啥会加.0000000000001一个
时间: 2024-09-13 13:08:51 浏览: 81
在Python中,浮点数的运算往往涉及到精度问题,这是由于浮点数在计算机内部是以二进制形式存储的。由于二进制无法精确表示某些十进制小数,所以即使是很简单的数学运算也可能产生精度上的误差。
当你在使用`pytest`进行断言测试时,如果两个浮点数相加后保留两位小数,通常会使用`round()`函数进行四舍五入。但是,由于浮点数的表示误差,可能会出现如你提到的“加.0000000000001”的现象。这是因为即使两个浮点数相加的结果在数学上应该是精确的,但由于浮点数本身的存储误差,四舍五入后的结果可能会有一个非常小的误差值。
为了避免这种情况,可以使用Python内置的`decimal`模块中的`Decimal`类型来进行精确的十进制计算。`Decimal`类型提供了更精确的控制,尤其是在涉及到金钱或者需要高精度计算的场合。
下面是一个使用`decimal.Decimal`来避免浮点数精度问题的示例:
```python
from decimal import Decimal, getcontext
# 设置精度,例如保留两位小数
getcontext().prec = 4
# 将浮点数转换为Decimal进行精确计算
num1 = Decimal('1.1')
num2 = Decimal('2.2')
# 计算和
sum_result = num1 + num2
# 四舍五入到两位小数
rounded_result = round(sum_result, 2)
# 输出结果
print(rounded_result) # 输出应为3.3,无多余的小数部分
```
使用`decimal`模块可以避免直接使用浮点数时遇到的精度问题,但需要注意的是,使用`decimal`时可能需要更多的内存和计算资源。
阅读全文