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的使用相关推荐

  1. Python decimal模块的使用

    Python decimal 模块 Python中的浮点数默认精度是15位. Decimal对象可以表示任意精度的浮点数. getcontext函数 用于获取当前的context环境,可以设置精度.舍 ...

  2. python一箭穿心代码怎样复制,Python Decimal copy_sign()用法及代码示例

    Decimal#copy_sign():copy_sign()是一个Decimal类方法,它返回第一个Decimal值的副本,其符号设置为与第二个Decimal值的符号相同. 用法: Decimal. ...

  3. python decimal 转 float_python教程之二python数学运算

    存储数据变量 #两个变量交换值,通过第三个参数实现 print('两个变量交换值,通过第三个参数实现'); #第一种方法是通过第三个参数实现 x=5;#变量赋值 y=11; #变量赋值 print(' ...

  4. python decimal类型转化_python的json模块,针对decimal类型直接dumps报错

    主要涉及的代码 def _iterencode(o, _current_indent_level): if isinstance(o, basestring): yield _encoder(o) e ...

  5. python decimal 转换为float_在Python中将float转换为decimal类型

    我只是在玩数字游戏. 我发现Numpy提供了一个名为np.vectorize的函数,允许您获取一个函数并将其应用于Numpy数组. 在[23]中:import numpy as np import d ...

  6. python decimal 转换为float_python float转为decimal

    73.2413793103 ======= 73.2414 ======= 当断言这两个值相等时,就出错了 参考链接: https://www.cnblogs.com/xueweihan/p/5207 ...

  7. python decimal函数_(转)python学习笔记5--decimal

    原文:https://blog.csdn.net/lemonwyc/article/details/37583125 上一节提到了除了基本类型之外的decimal,这节就学习下. 查看python3. ...

  8. python decimal类型转化_python中的decimal类型转换实例详解

    [Python标准库]decimal--定点数和浮点数的数学运算 作用:使用定点数和浮点数的小数运算. Python 版本:2.4 及以后版本 decimal 模块实现了定点和浮点算术运算符,使用的是 ...

  9. python decimal是什么类型_decimal 详解

    1.为什么要有decimal,解决了什么问题,为什么不用float 因为float会丢失精度.原因在于二进制要想表示十进制的数就会存在误差,比如用二进制来表示0.1,根本无法精确表示,但是这不是bug ...

  10. python decimal用法_Python decimal模块使用方法详解

    decimal 模块:decimal意思为十进制,这个模块提供了十进制浮点运算支持 1.可以传递给Decimal整型或者字符串参数,但不能是浮点数据,因为浮点数据本身就不准确. 2.要从浮点数据转换为 ...

最新文章

  1. 字节跳动这份面试题,你能打几分
  2. PM Basic Skill---Communicate Plan
  3. vs2008 error LNK2019: 无法解析的外部符号总结
  4. 也许你不知道的c#基本数据类型及其默认值
  5. 浅谈对离散型随机变量期望的理解
  6. Python 2.x vs Python 3.x(四)—— TypeError: unhashable type
  7. readonly(C# 参考)
  8. 邮局只能寄指定大小的箱子
  9. 基于Mac制作iPhone铃声教程,iTunes定制铃声
  10. outlook发邮件的服务器,outlook中要求写接收、发送邮件的服务器,应该怎样写?...
  11. Oracle表空间和数据文件
  12. 计量经济学笔记6-Eviews操作-自相关的检验与消除(DW、LM检验与FGLS、广义差分变换)
  13. chrome 浏览器开发者工具之网络面板
  14. 机器人让你摆脱电销压力
  15. linux-patch用法
  16. 201_DMA-BUF简单介绍
  17. ExecuteError: 执行失败。参数无效。 ERROR 000732
  18. 英国电信 云计算还不成熟
  19. 头脑风暴有两位盲人_盲人时如何获得开发人员工作:与有远见的团队一起工作的盲人开发人员的建议...
  20. Vue项目实战之电商后台管理系统(二) 主页模块

热门文章

  1. 2014秋C++ 狗逮耗子之“开口说英语”
  2. java后端面试题总结(持续更新)
  3. spm oracle cloud,Expérience client
  4. 2016年7月12日
  5. 给自己取了个英文名-Jamy Cai,哈哈~~
  6. win/mac/linux谷歌浏览器与driver对应版本下载
  7. 快速理解 脏读(未提交读),提交读(不可重复读), 可重复读, 可串行化 和 幻读
  8. 2020苏州大学上岸初复试经验贴
  9. react脚手架的build如何运行
  10. VS2010 SP1 离线安装包下载地址