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

 

转载于:https://www.cnblogs.com/chaoguo1234/p/9127658.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值