decimal 模块 实现小数精度控制

decimal 模块 实现小数精度控制

公司业务是涉及了卫星坐标点的计算,要求精度是非常高的,本人在写自动化脚本时,就参考了decimal模块,对获取的坐标数据进行计算,然后比较。


decimal 模块

简介:decimal意思为十进制,这个模块提供了十进制浮点运算支持。
小数值表示为 Decimal 类的实例。构造函数取一个整数或字符串作为参数。使用浮点数创建 Decimal 之前,可以先将浮点数转换为一个字符串,使调用者能够显式地处理值得位数,倘若使用硬件浮点数表示则无法准确地表述。另外,利用类方法 from_float() 可以转换为精确的小数表示。

模块方法

导入模块 语法: from decimal import *

方法名描述
localcontext
getcontext使用一个上下文(context)覆盖某些设置,如保持精度、如何完成取整、错误处理等等。上下文可以应用于一个线程中的所有 Decimal 实例,或者局部应用于一个小代码区。
from_float()可以转换为精确的小数表示。
decimal的context:

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

from decimal import *

getcontext().prec = 2

tmp = Decimal(float(2551.179))-Decimal(float(2551.178))
print tmp

#结果默认从小数的1开始保留两位
0.0010
[Finished in 0.6s]
从浮点型转换为Decimal类型
from decimal import *

a = 2542851.1739
tmp = Decimal.from_float(a)
print tmp

#Decimal类型   高精度数据
2542851.173899999819695949554443359375
[Finished in 0.7]
留在最后的话

如果a等于b,Decimal(a)-Decimal(b) ,得到的是0E-30,而不是0
将无法比较,建议转换float类型进行减法

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值