其他的数字类型——小数类型——小数基础 | 第二部分 类型与操作 —— 第 5 章: 数字类型 |《学习 python:强大的面向对象编程(第 5 版)》| python 技术论坛-大发黄金版app下载

未匹配的标注

最后一点值得详述。和当探索比较时简要预览那样:浮点数学不那么准确,因为用来存储值的空间有限。比如,下面应该等于0,但却不是。结果接近0,但位数不够导致无法精确:

>>> 0.1   0.1   0.1 - 0.3 # python 3.3
5.551115123125783e-17

在python的3.1和2.7版本之前,打印结果来产生用户友好显示格式的办法也完全没有帮助,因为跟浮点数学有关的硬件在准确性(也就是精度)方面是天生受限的。下面在3.3版本中给出的和前面输出一样的结果:

>>> print(0.1   0.1   0.1 - 0.3) # pythons < 2.7, 3.1
5.55111512313e-17

然而,使用小数,结果可以完全准确:

>>> from decimal import decimal
>>> decimal('0.1')   decimal('0.1')   decimal('0.1') - decimal('0.3')
decimal('0.0')

这里显示:通过调用在decimal模块中的decimal构造函数和传入具有结果对象所需小数数位的字符串(如果需要,使用str函数将浮点值转换为字符串),可以创建小数对象。当不同精度的小数被混合在表达式中时,python自动转换到最大的小数数位:

>>> decimal('0.1')   decimal('0.10')   decimal('0.10') - decimal('0.30')
decimal('0.00')

在python 2.7,3.1和之后版本,使用形式decimal.from_float(1.25)这个调用,也可以从浮点对象创建小数对象,而且最新版本的python允许直接使用浮点数。这个转换是精确的但有时会产生一个大的默认数位(28位),除非它们根据下一章中的方法固定:

>>> decimal(0.1)   decimal(0.1)   decimal(0.1) - decimal(0.3)
decimal('2.775557561565156540423631668e-17')

在python 3.3和之后版本中,小数模块也被极大地优化来提高性能:新版本的速度根据评分测试的程序类型,提升了据说10倍到100倍。

本文章首发在 大发黄金版app下载 网站上。

上一篇 下一篇
讨论数量: 0



暂无话题~
网站地图