1、浮点数的一个普遍的问题是它们不能精确的表示十进制数。
>>>a=4.2 >>>b=2.1 >>>a+b 6.300000000000001 >>>(a+b)==6.3 False
这是由于底层 CPU 和IEEE 754 标准通过自己的浮点单位去执行算术时的特征。看似有穷的小数, 在计算机的二进制表示里却是无穷的。
一般情况下,这一点点的小误差是允许存在的。如果不能容忍这种误差(比如金融领域),那么就要考虑用一些途径来解决这个问题了。
2、Decimal
使用这个模块不会出现任何小误差。
>>>fromdecimalimportDecimal >>>a=Decimal('4.2') >>>b=Decimal('2.1') >>>a+b Decimal('6.3') >>>print(a+b) 6.3 >>>(a+b)==Decimal('6.3') True
>>>fromdecimalimportDecimal,localcontext >>>a=Decimal('1.3') >>>b=Decimal('1.7') >>>print(a/b) 0.7647058823529411764705882353 >>>withlocalcontext()asctx: ...ctx.prec=3 ...print(a/b) ... 0.765 >>>withlocalcontext()asctx: ...ctx.prec=50 ...print(a/b) ... 0.76470588235294117647058823529411764705882352941176 >>>原文来自:https://www.py.cn
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
暂无评论内容