【Python】 decimal模块十进制定点和浮点运算

decimal模块用于十进制数学计算,具有以下特点:

  1. 提供十进制浮点数据类型运算支持,并且存储为十进制数序列;
  2. 精度:用于存储数字的位数是固定的,可以通过decimal.getcontext().prec=x 3来设置或修改,不同的数字可以有不同的精度数;
  3. 浮点:十进制小数点的位置不固定(但位数是固定的);

decimal的构建:可以通过整数、字符串或者元组构建decimal.Decimal,对于浮点数需要先将其转换为字符串

decimal的context:decimal在一个独立的context下工作,可以通过getcontext来获取当前环境。例如前面提到的可以通过decimal.getcontext().prec来设定小数点精度(默认为28)

常用方法

  1. 可以传递给Decimal整型或者字符串参数,但不能是浮点数据,因为浮点数据本身就不准确。
  2. 要从浮点数据转换为Decimal类型
from decimal import *
Decimal.from_float(22.222)
结果为
Decimal('22.22200000000000130739863379858434200286865234375')
  1. 通过设定有效数字,限定结果样式:
from decimal import *
getcontext().prec = 6
Decimal(1)/Decimal(7)

结果为Decimal(‘0.142857’),六个有效数字

  1. 四舍五入,保留几位小数
from decimal import *
Decimal('50.5679').quantize(Decimal('0.00'))

结果为Decimal(‘50.57’),结果四舍五入保留了两位小数

  1. Decimal 结果转化为string
from decimal import *
str(Decimal('3.40').quantize(Decimal('0.0')))

结果为’3.4’,字符串类型

业务场景下怎么用?数据敏感

一般涉及到精确的计算型或金融型内容,都会比较苛刻,如果下面的借贷还款计划计算

from __future__ import division
from decimal import Decimal

money = 7135.28   # 还款内容
index = 0.6			   # 利率
eve = 0.06			   # 每还一次降息
for i in range(1, 13):
    if index <= 0.0:
        index = 0
    print i, index, Decimal(money * index).quantize(Decimal("0.00"))      # 转化为指定的精度
    index = index - eve
结果
1 0.6 4281.17
2 0.54 3853.05
3 0.48 3424.93
4 0.42 2996.82
5 0.36 2568.70
6 0.3 2140.58
7 0.24 1712.47
8 0.18 1284.35
9 0.12 856.23
10 0.06 428.12
11 5.55111512313e-17 0.00
12 0 0.00
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值