第二章 数值类型

按照类型分类:

数值:整型、浮点型、布尔型、复数
序列:列表、字符串、字节
映射:字典

集合:集合

按照可修改性分类:

可修改类型   :列表,字典,集合
不可修改类型:数值,字符串,元组


一、 数值类型

1. 整数类型

(1) 定义: 变量名 = 整数类型
eg. a = 12
(2) 取值范围
在python2.x中,区分int和long,超过32位使用long存储
在python3.x中,不分整型和长整型,自动判断
   根据长度自动决定类型
   整型最大值取决于操作系统
	import sys
		print(sys.maxsize) #即二的六十四次方减一
(3) 进制手工转换(二进制八进制十进制十六进制)
> print(),等默认使用十进制


a. 定义前缀

0b --- 二进制 ---    bin()
0o --- 八进制 --- oct()
     --- 十进制    ---    int()
0x --- 十六进制 ---    hex()

b. 十进制和其他进制 ---- 下除取余法

c. 其他进制转十进制 ---- 乘幂法

d. 二进制转八进制 ---- 三位一转,也可以反向原理实现八进制转二进制

                                 

e. 二进制转十六进制 ---- 四位一转

(4) 机器进制转换---bin,oct, int, hex 通过内置函数转化成特定类型
> 注意:bin,oct,hex会返回字符串,int返回整型 
> int默认十进制,如果逗号后面加数字n(缺省值),代表前面的数为n进制
        
print(int(123,16))


(5) int(value, 缺省(进制)= 10)函数的作用:

a. 浮点数向零取整 --- int(3.14)

b. 字符串转十进制 --- int('FZ', 36) > 575


二、 布尔类型(True / False) --- 本质上属数值类型

应用场合: 返回值或者作为逻辑运算符两侧的值


三、 浮点数

小数,浮点类型只支持十进制

1. 定义

变量名 = 小数
# 浮点类型首位可以是0,但是整型不可以

2. 科学计数法

a = 2e20

                ##### 该值超过存储值最大值

3. 取值范围:有界限

通过sys.float_info.max表示最大值

4. 特殊浮点数 

            --- 无穷大的四则运算, 若无法确定运算结果仍为无穷大, 那么运算结果就是一个NaN

a. inf         --- 无穷大、无穷小
b. NaN     --- 不确定量          #自己和自己也不相等
print(float('NaN'))

    判断方法:
        x = float('nan')
        import math
	math.isnan(x)

        5. 浮点类型的不精确性

             --- 有的小数是无限小数,在计算机中近似存储

        print(10/3) --- 0.333333333333333333335    # 无限小数省略存储
a. 小数转成二进制小数(规则,小数位*2,得到结果取整数,一直取,从上到下)
0.1   *2  ----- 0
0.2   *2  ----- 0
0.4   *2  ----- 0
0.8   *2  ----- 1
0.6   *2  ----- 1
0.2   *2  ----- 0
0.4   *2  ----- 0
0.8   *2  ----- 1
0.6   *2  ----- 1 ... 
b. 尽量避免数量级相差很大的浮点数之间进行计算
f1 = 5e20
f2 = 1
print(f1+f2)   >>>   5e20
> 原因: 计算存储位数有限   ##########
c. 尽量避免等值判断
f1 = 0.1
f2 = 0.2
print(2*f1 == f2)
print(f1+f2) >>> 0.30000000000000004
e. 浮点数不精确性的解决方法   ---- 使用decimal模块下Decimal类(l存储位数默认为28位,实际也是一个省略值)
        decimal.Decimal(value)代表真实值(28位默认)
>>> import decimal
>>> a = decimal.Decimal(1/3)
>>> a
Decimal('0.333333333333333314829616256247390992939472198486328125')
>>> a == 0.333333333333333314829616256247390992939472198486328125
True
> 解决办法(使用字符串): x = decimal.Decimal('0.1'+'0.2')
> 显示特殊浮点型的原型 
    
print(decimal.Decimal('inf')+1)  #>>> Infinity 和无穷大类型运算仍然是浮点数
print(decimal.Decimal('inf')+1)  #>>> 报错,这个类不能和浮点型运算
print(decimal.Decimal('nan'))    #>>> NaN
print(decimal.Decimal('inf'))    #>>> Infinity

d. 修改有效位数 --- 通过getcontext()修改的有效位数,修改运算结果的位数,Decimal类默认位数为28位。 ----四舍五入
    decimal.getcontext().prec = 10

四、 复数类型

x = 1- 2j
实部和虚部都是浮点类型

五、四种类型之间的转换

int(value):        默认为int() =  0,向零取整,---# 复数不能转整型
float(value):        默认为float() = 0.0,转换成浮点数  ---# 复数不能转换成浮点型
complex(value):     默认值complex = 0j,什么都可以转
bool(value):       默认值bool()=False,什么都可以转,
> 两种类型做运算,取等级高类型 (复数> 浮点> 整型> 布尔)


原文地址:https://www.cnblogs.com/geoffreyone/p/9899773.html