(第二版)零基础入门Python小甲鱼-笔记-第三章-p9
数字类型(上)
接下来2节课我们来将来学习一Python的数字类型
Python有三种不同的数字类型
1、整数
2、浮点数
3、复数
1、整数(integers)
我们常说的 1 2 3 4 5 ,上山打老虎 这个12345 就是整数了
Python整数长度是不受限制的,它有无线大的精度,所以你可以随时随地的进行大数运算
比如 123466868949846516/45646451651
返回的是一个小数 ,其实Python的除法就算能被整除也会产生带小数的结果
我们都知道 6 除以 2应该等于 3 对吧 但是Python应该得到3.0
小数在Python中以浮点数的形式存放的
2、浮点数(floating point numbers)
我知道学编程的小伙伴数学基础都不会太差,现在来考考大家0.1 + 0.2 等于多少呢
答案 0.3 我们用Python来试试
哦买噶 Python 有了自己的想法 有些童鞋可能会说 这会不会是个BUG呢
我们在来看一个案例
对比整形,浮点数显得不那么专业了把
Python的浮点数之所以是具有误差的是因为Python跟C语言一样,都是采用IEEE754的标准来存储浮点数的,会产生一定精度上的误差,关于定点数和浮点数的存储原理在C语言都讲过后期我会更新.
由于浮点数并不是百分比紧精确的所以我们拿浮点数来作比较就要特别担心啦
比如 0.3 == 0.1 + 0.2 是不是会相等 从人类的角度肯定是相等的
但是Python给到的答案是False 因为我们从刚刚的实现可得0.1 + 0.2不等于0.3 而是等于
0.30000000000000004
所以 0.3 < 0.2 + 0.1 应该是正确的
这样Python才会认为是True 可是这样都不行的呢 我们都知道当设计到一些对计算精度比较敏感的行业比如说航天航空你可能只是小数点第17位数多了个4,但本来飞向月球的火箭就有可能就直接射到火星去了对吧 金融领域也是一样的 哪怕是小小的误差都会失之千里,就是不可被原谅的
如何精确做到浮点数计算
这里我们需要借助叫做decimal的模块
import decimal 导入decimal模块
然后使用 decimal 的Decimal来实例化一个对象 暂时我们还没有学习类和对象 不知道什么叫做实例化一个对象 这很正常 但是呢 大家先学着葫芦画瓢 后面我们讲到相关知识的时候自然就理解了
这里调用了decimal 参数是字符串! 0.1 我们赋值到 a 变量去
a = decimal.Decimal("0.1")
同样的道理 b = decimal.Decimal("0.2")
尽管代码写起来比较麻烦 还要使用字符串来表示数字 但是呢我们不难猜想一切 都是为了精准
这次我们就可以打出完全精确的答案了
print(a + b) 就等于 0.3嘞
我们也可以看到它的类型 <class 'decimal.Decimal'>
接下来我们进行比较 也是可以的
我们生成 d = decimal.Decimal("0.3") 不能直接拿0.3来比较 类型不同
a + b = c
这时候就要将一下E记法,其实也就是我们所说的科学计数法
用于表示一些比较极端的数,我们都知道水熊虫是世界上生命力最顽强的生物,或许只有太阳爆炸啦,它才会灭绝 变色 隐身、辐射、耐高温无敌的存在 那么这个开挂的物种体现有多大呢
非常小 最小只有50微米 那么转化为米的单位就是0.00005 小数点后一共有4个0加一共5
可以看到Python 选择用科学计数法来表示
这个e-05就表示 十的负五次方 合起来就是 5*10 的负五次方 也就是结果是0.00005
好这个大家都知道就好
接下来就是最后一共复数
3、复数(complex numbers)
它包含了一个实部和一个虚部
1 + 2j 那么1就是实部 2j 就是虚部 那么这就是一个复数,无论是实部还是虚部它们都是以浮点数的形式存放的
如果我们将一个复数赋值给一个变量 比如说 这里我们将 1 + 2j 复数赋值给 x
那么我们通过x.real 来获取它的这个实部是数值;x.imag 来获取它的这个虚部是数值;
注意他们都是浮点数