python小数数字对象Decimal

电子说

1.2w人已加入

描述

python的小数数字对象,类似于浮点数,只不过小数数字有固定的位数和小数点。

python小数数字是有固定精度的浮点值。

python小数数字对象的性能略微低于浮点数。

python小数数字需使用decimal模块。

python的decimal.getcontext().prec可以设置小数精度。

1.1 python小数基础知识

python浮点数缺乏精确性,因为存储数值的空间有限。

python小数对象可以修正浮点数的精确性问题。

1.1.1 Decimal()

python不同小数位数的Decimal对象运算时,自动升级为小数位数最多的小数位。

用法

Decimal(str)

描述

生成小数字符串对应的Decimal对象。

入参

str:小数字符串

示例

>>> 0.1+0.1+0.1-0.3
5.551115123125783e-17
>>> print(0.1+0.1+0.1-0.3)
5.551115123125783e-17
>>> from decimal import Decimal
>>> Decimal('0.1')+Decimal('0.1')+Decimal('0.1')-Decimal('0.3')
Decimal('0.0')
>>> Decimal('0.10')+Decimal('0.1')+Decimal('0.1')-Decimal('0.3')
Decimal('0.00')

1.2 设置全局精度

python通过上下文对象(decimal.getcontext().prec)设置小数的全局精度。

示例

>>> import decimal
>>> decimal.Decimal(1)/decimal.Decimal(7)
Decimal('0.1428571428571428571428571429')
>>> decimal.getcontext().prec = 4
>>> decimal.Decimal(1)/decimal.Decimal(7)
Decimal('0.1429')

1.3 临时设置精度

python通过本地上下文管理器(decimal. localcontext ().prec)设置小数的临时精度。语句执行完后,继续使用初始精度。

示例

>>> import decimal
>>> decimal.Decimal('1.00')/decimal.Decimal('3.00')
Decimal('0.3333333333333333333333333333')
>>> with decimal.localcontext() as ctx:
...         ctx.prec = 2
...         decimal.Decimal('1.00')/decimal.Decimal('3.00')
...
... 
Decimal('0.33')
>>> decimal.Decimal('1.00')/decimal.Decimal('3.00')
Decimal('0.3333333333333333333333333333')
打开APP阅读更多精彩内容
声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉

全部0条评论

快来发表一下你的评论吧 !

×
20
完善资料,
赚取积分