简介

如果你从事科学或工程领域的大多数计算,那么使用普通的浮点类型是比较普遍的做法。因为在真实世界中很少会要求精确到17位精度的普通浮点数。因此,计算过程中的那么一点点的误差是被允许的。其次,原生的二进制浮点数计算要快的多-有时候你在执行大量运算的时候速度也是非常重要的。总的来说,decimal 模块主要用在涉及到金融的领域。在这类程序中,哪怕是一点小小的误差在计算过程中蔓延都是不允许的。因此,decimal 模块为解决这类精度问题提供了方法。decimal意思为十进制,这个模块提供了十进制浮点运算支持。我们在数据库处理金融数据的时候也会遇到 Decimal 对象。

问题

当你在编写科学计算或者金融程序的时候碰到这种情况会让人发狂:

>>>a = 4.2

>>>b = 2.1

>>>a + b

6.300000000000001

1

2

3

4

>>>a=4.2

>>>b=2.1

>>>a+b

6.300000000000001

这就是机器进行二进制计算引入的误差,为了消除这样的误差,进行更加精确的浮点计算,就要是用到decimal模块。

Decimal()函数

from decimal import *

1

fromdecimalimport*

我们直接导入decimal模块里的所有函数。现在我们可以通过Decimal函数构建十进制浮点数,并进行常规的数值计算。

>>>a = Decimal('4.2')

>>>b = Decimal('2.1')

>>>a + b

Decimal('6.3')

>>>x = Decimal(3)

>>>y = Decimal(1)

>>>x + y

Decimal('4')

1

2

3

4

5

6

7

8

9

>>>a=Decimal('4.2')

>>>b=Decimal('2.1')

>>>a+b

Decimal('6.3')

>>>x=Decimal(3)

>>>y=Decimal(1)

>>>x+y

Decimal('4')

注意,Decimal函数传入的浮点数必须加引号(”),表示成字符串形式。传入整数时就不用加。Decimal函数的对象类型是decimal.Decimal,可以通过type()函数查看。

浮点数据转换成Decimal

Decimal函数并不建议传入浮点型数据,因为浮点型数据本身就是不精确的。可以通过两种方式传入浮点型数据:

>>>Decimal(1.22)

Decimal('1.2199999999999999733546474089962430298328399658203125')

>>>Decimal.from_float(15.3333)

Decimal('15.3332999999999994855670593096874654293060302734375')

1

2

3

4

5

>>>Decimal(1.22)

Decimal('1.2199999999999999733546474089962430298328399658203125')

>>>Decimal.from_float(15.3333)

Decimal('15.3332999999999994855670593096874654293060302734375')

getcontext().prec 设定有效数字

>>>getcontext().prec = 4

>>>Decimal('2.2') / Decimal('1.3')

Decimal('1.692')

1

2

3

>>>getcontext().prec=4

>>>Decimal('2.2')/Decimal('1.3')

Decimal('1.692')

保留4位有效数字。

设定小数位数

>>>Decimal('1.2346568355').quantize(Decimal('0.00'))

Decimal('1.23')

1

2

>>>Decimal('1.2346568355').quantize(Decimal('0.00'))

Decimal('1.23')

保留两位小数。

转换成字符串(string)格式

直接调用str()函数:

>>>str(Decimal('1.2346568355').quantize(Decimal('0.00')))

'1.23'

1

2

>>>str(Decimal('1.2346568355').quantize(Decimal('0.00')))

'1.23'

python decimal_Python中的decimal模块执行精确的浮点运算相关推荐

  1. python中安装decimal模块_python decimal和fractions模块

    1.简介 默认,浮点数学缺乏精确性 decimal 模块提供了一个Decimal 数据类型用于浮点数计算.相比内置的二进制浮点数实现float这个类型有助于金融应用和其它需要精确十进制表达的场合,控制 ...

  2. python浮点数怎么运算_Python如何执行精确的浮点数运算

    问题 你需要对浮点数执行精确的计算操作,并且不希望有任何小误差的出现. 解决方案 浮点数的一个普遍问题是它们并不能精确的表示十进制数. 并且,即使是最简单的数学运算也会产生小的误差,比如: >& ...

  3. python3中使用subprocess模块执行外部命令

    一. subprocess模块介绍 subprocess模块可以替代os模块下的os.system和os.popen等操作方法 subprocess模块在python2和python3上的使用上有一定 ...

  4. python3使用subprocess_python3中使用subprocess模块执行外部命令

    一. subprocess模块介绍 1. subprocess模块可以替代os模块下的os.system和os.popen等操作方法 2. subprocess模块在python2和python3上的 ...

  5. python paramiko_python中的paramiko模块

    paramiko是用python语言写的一个模块,遵循SSH2协议,支持以加密和认证的方式,进行远程服务器的连接.paramiko支持Linux, Solaris, BSD, MacOS X, Win ...

  6. python 3 中的pickle模块 阿波的博客

    只是说pickle模块的最简单的使用,如果想要仔细学习pickle的话,可以找一下别的博客,或者阅读一下pickle的源代码.查阅一下文档都是可以的, 那就先看一下如何找到pickle的源程序嘞... ...

  7. python中第三方模块_如何在python脚本中包含第三方模块?

    我已经开始使用Python来自动化我工作中的重复任务,并且经常需要将对第三方模块的引用集成到我的脚本中.如何将这些文件直接包含在脚本中?我知道有一些方法可以在python安装文件夹(C:\Python ...

  8. python zipfile_Python中的zipfile模块使用详解

    zip文件格式是通用的文档压缩标准,在ziplib模块中,使用ZipFile类来操作zip文件,下面具体介绍一下: class zipfile.ZipFile(file[, mode[, compre ...

  9. Python项目中 封装日志模块logging 及快速调用方法

    前言 在 Python 中,可以直接用自带的 logging 模块来记录日志,但是在使用时我们需要配置一些 Handler.Formatter 来进行一些处理,比如把日志输出到不同的位置,或者设置一个 ...

最新文章

  1. ONNX MLIR应用示例(含源码链接)
  2. [NC16591]关押罪犯 并查集
  3. BZOJ 3432: [Usaco2014 Jan]Cross Country Skiing (二分+染色法)
  4. 成功解决在Eclipse中出现的can not find declarration to go to
  5. tensorflow tf.enable_eager_execution()(立即执行操作,不添加到稍后在“ tf.Session”中执行的图)
  6. Oracle数据库用户失效对象,Oracle数据库对象失效解决
  7. XE5 Android 开发实现手机打电话和发短信 [转]
  8. 建立时间、保持时间与亚稳态
  9. window7 修改docker安装的machine 位置
  10. vue从入门到开发--2-基本结构
  11. 9月22日云栖精选夜读:脑洞 | 横扫围棋界的AlphaGo竟然出纪录片了!介意剧透者慎点…...
  12. 用java做一个小游戏源代码_用java编写的小游戏源代码分析
  13. 电梯轿厢场景下的电动车数据集
  14. 小说APP源码,实现带下划线的密码输入框
  15. php union用法,php编程SQL语句union all的使用编程
  16. bib文件引用参考文献方法--心得
  17. JDE(Towards Real-Time Multi-Object Tracking)代码训练——小白必看
  18. 2023年广西大学农村发展专业上岸学长经验、参考书推荐
  19. AR剪辑笔记之视频调色
  20. 7-3 最长公共前后缀

热门文章

  1. Win8开虚拟wifi ‘无法启动承载网络 组或资源的状态不是执行请求操作的正确状态“...
  2. 常见异常:No converter for XXX with preset Content-Type ‘applicationoctet-stream
  3. Python基础——第八章:Python文件操作
  4. CCF爬梯第二期(简单题 · C语言程序设计基础)
  5. Keras入门-猫狗大战
  6. UCSB云计算之Eucalyptus
  7. 分层结构的生活例子_分层架构中的服务层-服务层实战
  8. 华为云计算学习之热迁移
  9. mysql database.dialect_JDBC各种数据库的连接驱动及url、dialect
  10. Android编译错误——Duplicate class android.support.v4.os.ResultReceiver$1 found in modules jetified-and...