热门标签 | HotTags
当前位置:  开发笔记 > 编程语言 > 正文

第38天:Pythondecimal模块

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

by 程序员野客

在我们开发工作中浮点类型的使用还是比较普遍的,对于一些涉及资金金额的计算更是不能有丝毫误差,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.199999999999999733546474090
3.630000000000000097699626167
0.3333333333333333781908292778
‘‘‘

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

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

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

from decimal import *
print(Decimal(1.1) / Decimal(3.3))
print((Decimal(1.1) / Decimal(3.3)).quantize(Decimal(‘0.00‘)))
#输出结果
‘‘‘
0.3333333333333333781908292778
0.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

关注公众号:python技术,回复"python"一起学习交流
技术分享图片


推荐阅读
  • UDP协议开发
    UDP是用户数据报协议(UserDatagramProtocol,UDP)的简称,其主要作用是将网络数据流量压缩成数据报形式,提供面向事务的简单信息传送服务。与TCP协议不同,UD ... [详细]
  • AsyncDisplayKit2.0教程(下)
    AsyncDisplayKit2.0Tutorial:AutomaticLayout原文:AsyncDisplayKit2.0Tutorial:Automatic ... [详细]
  • #includestdafx.h#includeiostream#includesstream#includemap#includestring ... [详细]
  • win10如何将现有的桌面壁纸找出来
    直接在地址栏输入“C:\Users\用户名\AppData\Roaming\Microsoft\Windows\Themes”,将用户名替换为本机当前用户名,然后按下回车键即可。P ... [详细]
  • 利用ipv6技术,废旧笔记本变成server
    如果你家的路由器已经get到了ipv6地址,并且你家的电脑也获取了有效的ipv6地址,在广域网的设备可以访问到。那恭喜你,再配合我这个dd ... [详细]
  • Jmeter的聚合报告
       ... [详细]
  • 摘自:https:www.cnblogs.comnick-huangp4076273.htmlselect*from(select'Nick'asitemfromd ... [详细]
  • socket8 [命名管道]
    ::命名管道不但能实现同一台机器上两个进程通信,还能在网络中不同机器上的两个进程之间的通信机制。与邮槽不同,命名管道是采用基于连接并且可靠的传输方式,所以命名管道传输数据只能一对一 ... [详细]
  • PythonDay3
    #Author:ZhaoBin#实现对Haproxy配置文件的增删改查deffetch(backend):result[]withopen('ha.conf',&# ... [详细]
  • 模仿邮件登录系统
    模仿邮件登录系统码云代码库:https:gitee.compinaomansgiteemail_login.git实验结果图:验证用户名、密码不能为空,并提示用户名或密码错误提示用 ... [详细]
  • 1.数据准备#测试数组vectorc(5,34,65,36,67,3,6,43,69,59,25,785,10,11,14)vector##[1]53465366736436959 ... [详细]
  • 这篇文章主要简要记录了对于研发团队工作的质量 ... [详细]
  • webpack 配置IP 和端口号
    最近在用webpack搭建本地服务器的时候,因为不想总是用localhost来跑,所以对webpack.config.js进行了配置,如下devServer:{publicPath ... [详细]
  • Adapter相当于C(Controller,控制器),listView相当于V(View,视图)用于显示数据为ListView提供数据的List,数组或数据库相当于MVC模式中的 ... [详细]
  • VS2010快捷键大全原文:http:www.cnblogs.comLifeKingcnarchive201304163023603.html【窗口快捷键】Ctrl+W,W:浏览器 ... [详细]
author-avatar
php枫羲
寂寞是一个人的修身养性
PHP1.CN | 中国最专业的PHP中文社区 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved | 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有