第38天:Python decimal 模块

在我们开发工作中浮点类型的使用还是比较普遍的,对于一些涉及资金金额的计算更是不能有丝毫误差,Python 的 decimal  模块为浮点型精确计算提供了支持。

1 简介

decimal 模块设计以十进制数、算术上下文和信号这三个概念为中心。十进制数是不可变的,它有一个符号,系数数字和一个指数,为了保持重要性,系数数字不会截断尾随零,十进制数也有特殊值,如:Infinity、-Infinity 和 NaN;算术上下文是指定精度、舍入规则、指数限制、指示操作结果的标志以及确定符号是否被视为异常的陷阱启用器的环境;信号是在计算过程中出现的异常条件组。对于 decimal 模块的设计原则,我们只需简单了解即可。

2 快速上手

Decimal

我们看一下 Decimal 实例的基本使用。示例如下:

from decimal import *
print(Decimal(1.1) + Decimal(3.3))print(Decimal(1.1) - Decimal(3.3))print(Decimal(1.1) * Decimal(3.3))print(Decimal(1.1) / Decimal(3.3))
#输出结果'''4.399999999999999911182158030-2.1999999999999997335464740903.6300000000000000976996261670.3333333333333333781908292778'''

使用 getcontext().prec 设定有效数字。示例如下:

from decimal import *
print(Decimal(1.1) / Decimal(3.3))getcontext().prec = 2print(Decimal(1.1) / Decimal(3.3))
#输出结果'''0.33333333333333337819082927780.33'''

设置小数位数。示例如下:

from decimal import *
print(Decimal(1.1) / Decimal(3.3))print((Decimal(1.1) / Decimal(3.3)).quantize(Decimal('0.00')))
#输出结果'''0.33333333333333337819082927780.33'''

转成字符串。示例如下:

from decimal import *
str(Decimal('1.23465689').quantize(Decimal('0.00')))

adjusted()

在移出系数最右边的数字之后返回调整后的指数,直到只剩下前导数字,该函数用于确定最高有效位相对于小数点的位置。示例如下:

from decimal import *
print(Decimal('321e+5').adjusted())

compare(other, context=None)

比较两个 Decimal 实例的值。示例如下:

from decimal import *
print(Decimal(3.3).compare(Decimal(1.1)))

copy_abs()

返回参数的绝对值。示例如下:

from decimal import *
print(Decimal('-3.3').copy_abs())

is_normal(context=None)

如果参数是一个有限正规数,返回 True,如果参数是 0、次正规数、无穷大或是 NaN,返回 False。示例如下:

from decimal import *
print(Decimal(1).is_normal())

is_zero()

如果参数是 0,则返回 True,否则返回 False。示例如下:

from decimal import *
print(Decimal(0).is_zero())

ln(context=None)

返回操作数的自然对数(以 e 为底)。示例如下:

from decimal import *
print(Decimal(1).ln())

log10(context=None)

返回操作数的自然对数(以 10 为底)。示例如下:

from decimal import *
print(Decimal(10).log10())

max(other, context=None)

比较两个数值大小,并返回大的值。示例如下:

from decimal import *
print(Decimal(1.1).max(Decimal(2.2)))

max_mag(other, context=None)

比较两个数绝对值大小,并返回绝对值大的值。示例如下:

from decimal import *
print(Decimal(-3.3).max_mag(Decimal(1.1)))

min(other, context=None)

比较两个数值大小,并返回小的值。示例如下:

from decimal import *
print(Decimal(1.1).min(Decimal(2.2)))

min_mag(other, context=None)

比较两个数绝对值大小,并返回绝对值小的值。示例如下:

from decimal import *
print(Decimal(-3.3).min_mag(Decimal(1.1)))

is_signed()

如果参数带有负号,则返回为 True,否则返回 False。示例如下:

from decimal import *
print(Decimal(-3).is_signed())

总结

本节给大家介绍了 decimal 模块的一些概念和基本使用,对 Python 工程师使用 decimal 模块提供了支撑。

示例代码:Python-100-days-day038

参考:

https://docs.python.org/zh-cn/3.7/library/decimal.html

系列文章

   第37天:Python math 模块
   第36天:Python calendar 模块
   第35天:pathlib 模块
   第34天:Python json&pickle

   第33天:Python 枚举

第32天:Python logging 模块详解

第31天:Python random 模块详解

第30天:Python collections 模块详解

第29天:Python queue 模块详解

第28天:Python sys 模块详解

第27天:Python shutil 模块

第26天:Python os 模块详解

第25天:Python datetime 和 time

第24天:Python Standard Library 02

第23天:Python Standard Library 01

第22天:Python NameSpace & Scope

第21天:Web开发 Jinja2模板引擎

第0-20天:从 0 学习 Python 0-20 天合集

(0)

相关推荐

  • Python做简单爬虫(urllib.request怎么抓取https以及伪装浏览器访问的方法)

    一:抓取简单的页面: 用Python来做爬虫抓取网站这个功能很强大,今天试着抓取了一下百度的首页,很成功,来看一下步骤吧 首先需要准备工具: 1.python:自己比较喜欢用新的东西,所以用的是Pyt ...

  • Python干货宝典!玩转内置模块:日历模块

    Python定义了内置模块calendar它处理与日历相关的操作. Calendar module允许输出日历(如程序),并提供与日历相关的其他有用功能. Calendar模块中定义的函数和类使用理想 ...

  • Python脚本执行shell的一个小问题

    原创 DBA随笔 DBA随笔 1周前收录于话题#Python学习笔记29个 //Python脚本执行shell的一个小问题//     在python脚本中执行shell命令,可能是平常写脚本过程中比 ...

  • python笔记46-史上最强大最好用的python日志模块nb_log

    前言 python的日志模块如何封装一值都是一个头疼的问题,封装的不好总是会出现重复打印等头疼问题. 现在终于找到一个最好用的日志模块nb_log,此日志模块由这位大佬开发的https://www.c ...

  • python random模块

    本篇介绍比较常用的一个标准模块,random. 这是一个随机数模块,可以用来随机生成随机数,经常被用于数学.游戏.算法等等上面. 1.导入random模块 要使用此模块,要先导入. import ra ...

  • python logging模块的几点总结

    http://www.voidcn.com/article/p-ctmbnbwp-bbo.html 关于使用python logging模块的几点总结 使用python的标准日志模块logging可以 ...

  • 第26天:Python os 模块详解

    第26天:Python os 模块详解

  • 第27天:Python shutil 模块

    shutil 可以看作 sh + util,即 shell 工具之意,该模块提供了一些针对文件和文件夹的高级操作,如:拷贝.删除.移动等,shutil 模块是对 os 模块的补充. 1 文件和文件夹操 ...

  • 第29天:Python queue 模块详解

    queue 模块即队列,特别适合处理信息在多个线程间安全交换的多线程程序中.下面我们对 queue 模块进行一个详细的使用介绍. 1 queue 模块定义的类和异常 queue 模块定义了以下四种不同 ...

  • 第30天:Python collections 模块

    第30天:Python collections 模块

  • 第31天:Python random 模块

    在本节中继续介绍 Python 提供的常用模块 random 模块,它的主要功能是用来生成伪随机数的. random 模块 Python 提供的 random 模块实现了各种分布式的伪随机数生成器.该 ...

  • 第32天:Python logging 模块详解

    This module defines functions and classes which implement a flexible event logging system for applic ...