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
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 记一次.NET内存居高不下排查解决与启示
· 探究高空视频全景AR技术的实现原理
· 理解Rust引用及其生命周期标识(上)
· 浏览器原生「磁吸」效果!Anchor Positioning 锚点定位神器解析
· 没有源码,如何修改代码逻辑?
· 全程不用写代码,我用AI程序员写了一个飞机大战
· MongoDB 8.0这个新功能碉堡了,比商业数据库还牛
· 记一次.NET内存居高不下排查解决与启示
· DeepSeek 开源周回顾「GitHub 热点速览」
· 白话解读 Dapr 1.15:你的「微服务管家」又秀新绝活了