【python】Decimal的使用
1.说明
python原生数据类型在进行浮点运算时,可能会由于精度问题导致计算结果不准确,尤其是浮点数和较大的数据进行运算,所以如果对数据精度有要求,比如说金额,我们就需要使用decimal这个库
2.精度
decimal的精度默认是28位,可以自定义,通过getcontext获取线程上下文,然后修改prec属性即可
from decimal import Decimal, getcontextprint(getcontext().prec) # 计算精度,默认是28
getcontext().prec = 100 # 可修改
3.Decimal
我们可以通过实例化Decimal对象时传入value参数把其他的数据类型转换成Decimal类型。注意,尽量传入整数和字符串,如果传入float会导致结果不准确(float本身就存在精度问题)
a = Decimal("5632569878.6514126") # Decimal(5632569878.6514126)
b = Decimal("7") # Decimal(7)
c = Decimal(63) # Decimal(63)
d = Decimal.from_float(6.325) # Decimal(6.32500000000000017763568394002504646778106689453125), 不准确
4.普通计算
Decimal类型也可以像python基本数据类型那样进行加减乘除等运算
a = Decimal("8.651") # Decimal(8.651)
b = Decimal("7") # Decimal(7)print(type(a + b), a + b) # <class 'decimal.Decimal'> 15.651
print(a - b, ) # Decimal(1.651)
print(a * b, ) # Decimal(60.557)
print(a / b, ) # Decimal(1.235857142857142857142857143)
print(a // b, ) # Decimal(1)
print(a ** 2, ) # Decimal(74.839801)
5.保留小数
decimal有多种保留小数位数的方式,如下
代号 | 说明 |
---|---|
ROUND_CEILING | 总是趋向正无穷大方向取值 |
ROUND_FLOOR | 总是趋向负无穷大方式取值 |
ROUND_DOWN | 总是趋向0方向取值 |
ROUND_UP | 总是趋向0的反方向取值 |
ROUND_HALF_UP | 四舍五入,即当大于等于5,朝远离0的方向取值 |
ROUND_HALF_DOWN | 最后一个有效数字大于或等于5则朝0反方向取整,否则,趋向0取值 |
ROUND_HALF_EVEN | 类似于ROUND_HALF_DOWN,不过,如果最后一个有效数字值为5,则会检查前一位。偶数值会导致结果向下取整,奇数值导致结果向上取整 |
ROUND_05UP | 如果最后一位是0或5,则朝0的反方向取整;否则向0取整 |
from decimal import Decimal, ROUND_CEILING, ROUND_FLOOR, ROUND_DOWN, ROUND_HALF_UP, ROUND_HALF_DOWNprint(Decimal("15.987654321").quantize(Decimal("0.00000"), ROUND_CEILING)) # 15.98766,正无穷大向上取值
print(Decimal("-15.987654321").quantize(Decimal("0.00000"), ROUND_CEILING)) # -15.98765,负无穷大向上取值
print(Decimal("15.987654321").quantize(Decimal("0.00000"), ROUND_FLOOR)) # 15.98765,负无穷大向下取值
print(Decimal("-15.987654321").quantize(Decimal("0.00000"), ROUND_FLOOR)) # -15.98766,负无穷大向下取值
print(Decimal("15.987654321").quantize(Decimal("0.00000"), ROUND_DOWN)) # 15.98765,趋向0取值
print(Decimal("-15.987654321").quantize(Decimal("0.00000"), ROUND_DOWN)) # -15.98765,趋向0取值
【python】Decimal的使用相关推荐
- Python decimal模块的使用
Python decimal 模块 Python中的浮点数默认精度是15位. Decimal对象可以表示任意精度的浮点数. getcontext函数 用于获取当前的context环境,可以设置精度.舍 ...
- python一箭穿心代码怎样复制,Python Decimal copy_sign()用法及代码示例
Decimal#copy_sign():copy_sign()是一个Decimal类方法,它返回第一个Decimal值的副本,其符号设置为与第二个Decimal值的符号相同. 用法: Decimal. ...
- python decimal 转 float_python教程之二python数学运算
存储数据变量 #两个变量交换值,通过第三个参数实现 print('两个变量交换值,通过第三个参数实现'); #第一种方法是通过第三个参数实现 x=5;#变量赋值 y=11; #变量赋值 print(' ...
- python decimal类型转化_python的json模块,针对decimal类型直接dumps报错
主要涉及的代码 def _iterencode(o, _current_indent_level): if isinstance(o, basestring): yield _encoder(o) e ...
- python decimal 转换为float_在Python中将float转换为decimal类型
我只是在玩数字游戏. 我发现Numpy提供了一个名为np.vectorize的函数,允许您获取一个函数并将其应用于Numpy数组. 在[23]中:import numpy as np import d ...
- python decimal 转换为float_python float转为decimal
73.2413793103 ======= 73.2414 ======= 当断言这两个值相等时,就出错了 参考链接: https://www.cnblogs.com/xueweihan/p/5207 ...
- python decimal函数_(转)python学习笔记5--decimal
原文:https://blog.csdn.net/lemonwyc/article/details/37583125 上一节提到了除了基本类型之外的decimal,这节就学习下. 查看python3. ...
- python decimal类型转化_python中的decimal类型转换实例详解
[Python标准库]decimal--定点数和浮点数的数学运算 作用:使用定点数和浮点数的小数运算. Python 版本:2.4 及以后版本 decimal 模块实现了定点和浮点算术运算符,使用的是 ...
- python decimal是什么类型_decimal 详解
1.为什么要有decimal,解决了什么问题,为什么不用float 因为float会丢失精度.原因在于二进制要想表示十进制的数就会存在误差,比如用二进制来表示0.1,根本无法精确表示,但是这不是bug ...
- python decimal用法_Python decimal模块使用方法详解
decimal 模块:decimal意思为十进制,这个模块提供了十进制浮点运算支持 1.可以传递给Decimal整型或者字符串参数,但不能是浮点数据,因为浮点数据本身就不准确. 2.要从浮点数据转换为 ...
最新文章
- 字节跳动这份面试题,你能打几分
- PM Basic Skill---Communicate Plan
- vs2008 error LNK2019: 无法解析的外部符号总结
- 也许你不知道的c#基本数据类型及其默认值
- 浅谈对离散型随机变量期望的理解
- Python 2.x vs Python 3.x(四)—— TypeError: unhashable type
- readonly(C# 参考)
- 邮局只能寄指定大小的箱子
- 基于Mac制作iPhone铃声教程,iTunes定制铃声
- outlook发邮件的服务器,outlook中要求写接收、发送邮件的服务器,应该怎样写?...
- Oracle表空间和数据文件
- 计量经济学笔记6-Eviews操作-自相关的检验与消除(DW、LM检验与FGLS、广义差分变换)
- chrome 浏览器开发者工具之网络面板
- 机器人让你摆脱电销压力
- linux-patch用法
- 201_DMA-BUF简单介绍
- ExecuteError: 执行失败。参数无效。 ERROR 000732
- 英国电信 云计算还不成熟
- 头脑风暴有两位盲人_盲人时如何获得开发人员工作:与有远见的团队一起工作的盲人开发人员的建议...
- Vue项目实战之电商后台管理系统(二) 主页模块