首先我们先来说整数,我们在数学中学习的123456789等等,就是整数啦~,当然python的整数长度也是不受限制的,换句话说python的的整数有无限大的精度,随意我们可以随时随地的行进超大数的运算。
举例:
a=1112234579121621 / 11235813213455
print(a)
运算结果:
98.99012719343793
那么我们会发现他的运算结果时一个小数,因为python的运算规则就是即使能被整除也会产生小数部分的输出。
再比如:
a=9 / 3
print(a)
运算结果:
3.0
我们还是可以看到即使是我们最常见的9/3=3,但是python的运算结果还是有小数部分的出现,这也充分的证实了上面那句话:python的整数部分的运算规则就是会出现小数部分的情况。
python的浮点数会出现小数部分有很多位的情况。
比如:
a=0.1
b=0.2
c=a+b
print(c)
运算结果:
0.30000000000000004
大家可以看到,我们的0.1+0.2本来就是=0.3的简单问题,为什么python会给我们运算出来一大堆东西呢?
有的有的朋友就会问,这是不是一个python存在的bug呢?
emmm,大家可以想想,如果说简单的一个数字运算救出bug的话,那么python凭什么会成为世界第一语言呢?
其实啊,python的浮点数运算之所以存在误差,是因为python语言和C语言一样,都是采用IEEE754的标准来存储浮点数的,所以呢python与我们老语言C一样,也会产生精度上的误差。
由于浮点数不是绝对的精确,所以我们那浮点数来作比较的时候呢,就比较的担心了。
我们可以针对于python的浮点数的运算来做一个判断,
比如:
if(0.3 == 0.1+0.2):
print("相等")
else:print("不相等")
运算结果:
不相等
如果按照我们人类的运算逻辑思路的话,0.3=0.1+0.2是毫无疑问的,但是大家可以看见python呢却认为这样是不对的。
所以我们根据上面的0.1+0.2=0.30000000000000004情况我们可以再一次来验证一下:
比如:
if(0.30000000000000004 == 0.1+0.2):
print("相等")
else:print("不相等")
运算结果:
相等
这样python呢就认为运算结果是对的。
但是,大家都知道,但凡是python所触及到的行业,都是一些高级的智能领域的行业,就算是小数点后好几千位有误差,都是不行的。
比如,人类在外月球发射的火箭,如果存在一丁点的误差就有可能导致火箭发射到了别的星球。所以这样的运算误差是绝对不允许的!
所以呢,python为了解决这一运算误差,引入了一个decimal的模块!
decimal模块的使用方法:
首先引入decimal模块:
import decimal
然后我们要创建decimal的实体类,并把0.1赋值给a,0.2复赋值给b:
a = decimal.Decimal('0.1')
b = decimal.Decimal('0.2')
然后相加并输出:
c = a+b
print(c)
运算结果:
0.3
哎?这时候大家看到了就是我们人类的逻辑思路运算出来的结果了(当然类和模块的知识这里只是简单的引入一下来解决我们浮点数的运算问题,类和模块以后还会给大家讲到,这里只需要大家知道这个decimal模块可以帮助我们来消除浮点数运算的误差就可以了)。
那么对于我们数学中的科学计数法,python的浮点数也是有规则的。
比如:
a = 0.00005
print(a)
运算结果:
5e-05
这里python就选择了使用科学计数法来表示我们的0.00005;
复数大家都知道,包括一个实部和一个虚部,需要注意的是复数在python中也是由浮点数的形式来存在的。
比如:
x = 1 + 2j
print(x.real)
print(x.imag)
1就是实部,2j就是虚部;
我们可以分别用x.real和x.imag来获取我们的实部和虚部的值。
运算结果:
1.0
2.0
大家可以看到,我们获取到的实部与虚部的值,python都是以浮点数的形式呈现的!