数据类型
浮点数float,简单来说是带小数点的,小数点后最多16位
这是因为,Python计算浮点数的方式与我们不一样。Python计算浮点数时,会先把0.55和0.3转化成二进制数【注:二进制数由0和1表示,逢二进一】,如下列代码:
#进制转换
0.55(十进制) = 0.1000110011001100110011001100110011001100110011001101(二进制)
0.3(十进制) = 0.0100110011001100110011001100110011001100110011001101(二进制)
然后,这俩二进制数通过二进制法则运算后,再通过复杂的计算公式,将二进制结果转成十进制小数。
经过这两次转换,小数点后面就产生了多余的“尾巴”。这样,就造成了我们与程序计算结果的差异
python2
>>> print(0.55+0.3)
0.85
>>>
python3
>>> print(0.55+0.3)
0.8500000000000001
>>> a="我"
>>> b='有'
>>> c=100
>>> d="""元"""
>>> print(a+b+str(c)+d)
我有100元
>>> print(a+b+'c'+d)
我有c元
>>> print(a+b+`c`+d)
我有100元
>>>
可是,为什么引号内我们使用的是数字,而不是变量名c呢?这是因为,当我们使用引号时,引号里的东西,都会被强制转换为字符串格式
所以,如果我们把变量名c放进引号里后,被强制转换为字符串的,将是变量名c,而不是变量名代表的数字10
int()函数转换数据类型
bug = '666' hair = '0' print(int(bug)+int(hair))
注意一点:只有符合整数规范的字符串类数据,才能被int()强制转换。
别看它虽然只有一句话,但它其实带有三层含义:首先,整数形式的字符串比如'666'和'0',可以被int()函数强制转换
其次,文字形式,比如中文、火星文或者标点符号,不可以被int()函数强制转换,
最后,小数形式的字符串,由于Python的语法规则,也不能使用int()函数强制转换
比方说下列代码,如果点击运行,程序会报错【ValueError:invalid literal for int() with base 10: '3.8'
print(int('3.8'))
#运行后显示结果:ValueError:invalid literal for int() with base 10: '3.8'
print(int(3.8))
3
上方的代码串,就是一条将浮点数3.8强制转换的语句。但是,为什么输出的结果是3呢?
你看,int()函数的本质是将数据转换为整数。所以对于浮点数,int()函数会做取整处理。但是,同我们平时对小数四舍五入的处理方法不同,int()函数会直接抹零,直接输出整数部分。
可是,如果遇到这种情况:字符串就是小数形式,比如'3.8'这种。我不想让它变为整数3,想让它保持小数形式的3.8,那我要怎么做呢?
首先float()函数的使用,也是将需要转换的数据放在括号里,像这样:float(数据)
其次,float()函数也可以将整数和字符串转换为浮点类型。但同时,如果括号里面的数据是字符串类型,那这个数据一定得是数字形式。
>>> word = '3.8'
>>> number = 1
>>> sentence = '人工智障说:3.8+1等于'
>>> print(sentence+str(int(float(word)+number)))
人工智障说:3.8+1等于4
>>>
错误案例:
int()函数无法转换小数形式的字符串