文章总览图
什么是类型转换,有点像身份的变更。不同的身份,有权做的事情也不一样。
比如上学的时候,每个科目都有课代表。语文课代表就是辅助语文课的相关学习工作。
而数学课代表则是辅助数学相关的学习工作。如果语文课代表想去做数学相关的辅助工作。
就需要从语文课代表转岗到数学课代表才行。数据类型的转换也是如此。
例1:正确示例。
int_str = '102983475'
new_int = int(int_str)
print(new_int)
运行结果:
102983475
例2:错误示例。不都是数字组成的字符串。
int_str = '1029834a5'
new_int = int(int_str)
print(new_int)
运行结果:报错。
/Users/llq/PycharmProjects/pythonlearn/pythonlearn/change/bin/python /Users/llq/PycharmProjects/pythonlearn/change/1.py
Traceback (most recent call last):
File "/Users/llq/PycharmProjects/pythonlearn/change/1.py", line 2, in <module>
new_int = int(int_str)
ValueError: invalid literal for int() with base 10: '1029834a5'
进程已结束,退出代码为 1
例1:
# coding:utf-8
int_data = 12
float_data = 3.14
str_int_data = str(int_data)
str_float_data = str(float_data)
print(str_int_data,str_float_data,type(str_int_data),type(str_float_data))
zero_number = 0
_number = -1
str_zero_number = str(zero_number)
str_number = str(_number)
print(str_zero_number,str_number,type(str_zero_number),type(str_number))
str_float = '3.14'
str_int = '123456'
real_float = float(str_float)
real_int = int(str_int)
print(real_float,real_int,type(real_float),type(real_int))
运行结果:
12 3.14 <class 'str'> <class 'str'>
0 -1 <class 'str'> <class 'str'>
3.14 123456 <class 'float'> <class 'int'>
进程已结束,退出代码为 1
例2:内部有非数字的字符串:例如 '123A',用float()转成浮点型,转换失败。
mix_str = '123A'
print(float(mix_str))
运行结果:
/Users/llq/PycharmProjects/pythonlearn/pythonlearn/change/bin/python /Users/llq/PycharmProjects/pythonlearn/change/change_str_number.py
Traceback (most recent call last):
File "/Users/llq/PycharmProjects/pythonlearn/change/change_str_number.py", line 26, in <module>
print(float(mix_str))
ValueError: could not convert string to float: '123A'
进程已结束,退出代码为 1
例3:内部是浮点型的字符串:例如'3.14',用int()转换成整型,转换失败。
float_data_str ='3.14'
test_data = int(float_data_str)
print(test_data,type(test_data))
运行结果:
/Users/llq/PycharmProjects/pythonlearn/pythonlearn/change/bin/python /Users/llq/PycharmProjects/pythonlearn/change/change_str_number.py
Traceback (most recent call last):
File "/Users/llq/PycharmProjects/pythonlearn/change/change_str_number.py", line 28, in <module>
test_data = int(float_data_str)
ValueError: invalid literal for int() with base 10: '3.14'
进程已结束,退出代码为 1
虽然int()可以对字符串进行转换,但是'3.14'内部是个浮点类型。如果它是个纯粹的浮点类型,还可以用int()进行一次转换。
但是'3.14'实际上是个内部是浮点型的字符串类型,所以不符合它的标准。就报错了。
例4:内部是浮点型的字符串:例如'3.14',用float()转换成浮点型,转换成功。
float_data_str ='3.14'
test_data = float(float_data_str)
print(test_data,type(test_data))
运行结果:
3.14 <class 'float'>
例5:内部是整型的字符串:例如:'123',通过float()转换成浮点型,转换成功。
# coding:utf-8
int_data_str = '123'
test_data = float(int_data_str)
print(test_data,type(test_data))
运行结果:
123.0 <class 'float'>
进程已结束,退出代码为 0
以上总结:
如果是个浮点类型的字符串,想用int()函数转换,是不可以的。但是,如果是个整型的字符串,可以通过float()进行转换。