Python中的Numeric
整型Integer
在Python2.X中,Integer有两种类型,一种是32bit的普通类型,一种是精度无限制的long类型,在数字后面标识l或者L来标识long类型,并且,当32bit发生overflow无法表示时,会自动转换成long类型;
在Python3.X中,Integer只有一种类型,就是long类型,因此,后面的l或者L标识就可以不用写了
浮点数Float
在标准的CPython中,浮点数就是以double类型来实现的,这里需要注意的是,当一个整型与浮点数进行运算的时,结果是什么类型呢?答案是浮点类型。在进行运算时,Python会先将操作数向上转换为更为复杂的类型,然后进行计算。在Python中,浮点数类型比Integer类型复杂,而复数Complex比浮点数复杂(如果把Decimal和Fraction考虑在内,那么Decimal和Fraction比Integer复杂,同时浮点数比Decimal和Fraction复杂,而Decimal和Fraction两者是不能一起进行运算的,Python会报错)
定点数Decimal
1 定点数的生成
定点数由Decimal类生成:
from decimal import Decimal
Decimal("0.1") + Decimal("0.10") + Decimal("0.2")
#运行结果为Decimal("0.40")
在上述例子中,Decimal运算会自动进行精度转换,运算结果的精度和运算项中,精度最大的项一致。
在Python2.7,Python3.X中,还可以从浮点数生成定点数:
Decimal(0.1) + Decimal(0.1) + Decimal(0.1) - Decimal(0.3)
#运算结果:Decimal('2.775557561565156540423631668E-17')
由于浮点数的表示问题,最后可能会生成一个精度很大的定点数,为了避免这种情况,可以手动指定定点数的精度
2 定点数的精度
定点数的默认精度是28位,可以手动进行设置,并且一旦设置,后续所有在当前线程中创建的定点数精度都一样,设置精度的方法就是使用decimal.getcontext方法:
#设置精度前
decimal.Decimal(1) / decimal.Decimal(7)
####运行结果
####Decimal('0.1428571428571428571428571429') #设置精度后
decimal.getcontext().prec = 4
decimal.Decimal(1) / decimal.Decimal(7)
####运行结果
####Decimal('0.1429')
有理数Fraction
1 有理数的生成
有理数由Fraction类生成:
from fractions import Fraction
Fraction(1, 3) + Fraction(1, 3)
#运行结果Fraction(2, 3)
有理数同样也可以由浮点数字符串生成:
Fraction("1.333")
#运行结果Fraction(1333, 1000)
2 浮点数转换为有理数
浮点数转换为有理数的时,可能会有精度的丢失,这时,可以设置分子的最大值,从而产生我们想要的结果
a = (4.0 / 3).as_integer_ratio()
a = Fraction(*a)
#运行结果为Fraction(22517998136852479, 13510798882111488) a.limit_denominator(10) #设置分子的最大值
#运行结果为Fraction(4, 3)
Boolean
Python中的Boolean类型bool只包含两个值True和False,True和False本质上就是1和0,但它们同时也是bool类型的两个实例,而bool类型是int类型的子类,所以会有如下的现象:
isinstance(True, int)
#运行结果True True == 1
#运行结果True True is 1
#运行结果False True + 4
#运行结果5
Python中的Numeric的更多相关文章
- python中,numeric(数字类型)和integer(整型)的区别
说明: 在今天做int实现的过程中,官方函数的解释是将numeric转换为integer,就突然不明白,两个有啥区别. numeric-数字类型包括: int,float,bool,complex i ...
- Python::re 模块 -- 在Python中使用正则表达式
前言 这篇文章,并不是对正则表达式的介绍,而是对Python中如何结合re模块使用正则表达式的介绍.文章的侧重点是如何使用re模块在Python语言中使用正则表达式,对于Python表达式的语法和详细 ...
- Python中的内置函数
2.1 Built-in Functions The Python interpreter has a number of functions built into it that are alway ...
- Python中异常(Exception)的总结
Python中的异常处理 异常处理的语句结构 try: <statements> #运行try语句块,并试图捕获异常 except <name1>: <statement ...
- [转]Python中的矩阵转置
Python中的矩阵转置 via 需求: 你需要转置一个二维数组,将行列互换. 讨论: 你需要确保该数组的行列数都是相同的.比如: arr = [[1, 2, 3], [4, 5, 6], [7, 8 ...
- 【转载】python中not,and,or的优先级问题及用法
作业: >>> print(5<4 or 3)3>>> print(2>1 or 6)True>>> print(5>1 and ...
- Python中模块的发布与安装
模块(Module) Python中有一个概念叫做模块(module),这个和C语言中的头文件以及Java中的包很类似,比如在Python中要调用sqrt函数,必须用import关键字引入math这个 ...
- 对于Python中回调函数的理解
关于回调函数,网上有很多说明和各种解释,多数在尝试用语言描述.我认为,如果对各个角色之间的关系不清楚,如果没有相关的编程需求,那么语言便非常无力,很难理解. 这是360百科的解释: 在计算机程序设计中 ...
- Python中的基础数据类型
Python中基础数据类型 1.数字 整型a=12或者a=int(2),本质上各种数据类型都可看成是类,声明一个变量时候则是在实例化一个类. 整型具备的功能: class int(object): & ...
随机推荐
- 复习宝典之Redis
查看更多宝典,请点击<金三银四,你的专属面试宝典> 第八章:Redis Redis是一个key-value的nosql数据库.先存到内存中,会根据一定的策略持久化到磁盘,即使断电也不会丢失 ...
- 获取当前对象的key的名称
获取当前对象的key的名称(无法获取),只能曲线救国 通过给标签添加class,id, 然后通过对class的遍历,来获取到id(这个id对应数据库的字段,所以对应对象的key) 然后再给 id 赋值 ...
- shell编程基础-01
1.1 前言 1.1.1 为什么学Shell Shell脚本语言是实现Linux/UNIX系统管理及自动化运维所必备的重要工具Linux/UNIX系统的底层及基础应用软件的核心大都涉及Shell脚本的 ...
- 关于js复制的那些事儿
window.clipboardData的作用是在页面上将需要的东西复制到剪贴板上,提供了对于预定义的剪贴板格式的访问,以便在编辑操作中使用. 三个方法 (1)clearData(sDataForma ...
- Linux字符设备驱动--No.3
字符驱动(按键)初始化函数分析: int charDrvInit(void) { devNum = MKDEV(reg_major, reg_minor); printk(KERN_EMERG&quo ...
- shell基础笔记
什么是shell脚本 我自己对shell脚本的理解就是一系列的shell命令加入逻辑关系,实现类似"批处理"的功能.而不是简单的命令的堆砌,那样的shell脚本bug重重. 脚本开 ...
- JavaSE思维导图
Java基础知识: 面向对象: 集合: 多线程.网络编程.反射.设计模式: 常用API: 转载 https://blog.csdn.net/qq_34983808/article/detai ...
- 如何在同一个Excel里,对两个很相似的工作簿比对出不同之处
如何在同一个Excel里,对两个很相似的工作簿比对出不同之处
- 笔记-jinja2语法
笔记-jinja2语法 1. 基本语法 控制结构 {% %} 变量取值 {{ }} 注释 {# #} 2. 变量 最常用的是变量,由Flask渲染模板时传过来,比如上例中的”nam ...
- 【费元星】crt 无法上传文件,总是显示盾牌表示-完美解决
将如下内容保存到文件中,已.bat 结尾 taskkill /f /im explorer.exeattrib -s -r -h "%userprofile%\AppData\Local\i ...