我有一个情况,当经典表示错误在 Python 中开始成为一个问题:我需要将它们用于 Numpy 中的矩阵运算以及decimal尚不支持类型。
你们都知道如果我这样做111.85 * 111.85
我会得到12510.422499999999
但如果我round(12510.422499999999, 4)
我当然可以得到正确的结果12510.4225
.
但实际的问题是:
- 这个圆形的东西是一个好主意和一个好的实践吗?
- 这适用于所有情况吗?有时 ..999 小数位可能更多
- 最后,如何获得适当的小数位数以用于所有可能值的舍入?
即使四舍五入,小数点仍然不会exactly你期望它是什么。 Python 可能只显示最高有效位,但潜在的十进制不准确仍然存在。
python 文档专门用一节来介绍它
由于方式原因,许多用户不知道近似值
显示值。 Python 只打印十进制近似值
存储的二进制近似值的真实十进制值
机器。在大多数机器上,如果 Python 要打印真正的小数
存储为 0.1 的二进制近似值,则必须
展示
>>> 0.1
0.1000000000000000055511151231257827021181583404541015625
这比大多数人认为有用的数字要多,因此 Python 保留了
通过显示舍入值来管理位数
>>> 1 / 10
0.1
对于大多数用例,可以安全地忽略不准确性。如果你是
处理极小或极大的数字或需求
精确到许多小数位,您可以使用decimal
library
>>> Decimal('111.85') * Decimal('111.85')
Decimal('12510.4225')
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)