1.简介
前边的几篇文章已经大致地介绍了python的几种数据类型和各种类型之间的相互转换,接下来就拆分开将各种数据类型一一的进行详细的介绍,今天宏哥给小伙伴或者童鞋们介绍和讲解数字数据类型。
2.什么是数字(Number)类型
数字类型数据,顾名思义:就是与数字有关的数据类型,数字类型用于存储数学意义上的数值。
数字类型是不可变类型。这个在前边的文章中也有所介绍,这里简单的提及一下,所谓的不可变类型,指的是类型的值一旦有不同了,那么它就是一个全新的对象。数字1和2分别代表两个不同的对象,对变量重新赋值一个数字类型,会新建一个数字对象。
2.1变量与数据类型的关系
变量只是对某个对象的引用或者说代号、名字、调用等等,变量本身没有数据类型的概念。类似1,[2, 3, 4],"haha"这一类对象才具有数据类型的概念。
1.以下实例在变量赋值时 Number 对象将被创建:
🧮示例代码:
python
# -*- coding:utf-8 -*-
# 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行
# 2.注释:包括记录创建时间,创建人,项目名称。
'''
Created on 2025-08-18
@author: 北京-宏哥
北京宏哥(微信搜索:北京宏哥,关注宏哥,提前解锁更多测试干货!)
Project: Python零基础从入门到精通详细教程11 - python数据类型之数字(Number)-浮点型(float)详解
'''
# 3.导入模块
var1 = 1
var2 = 10
2.也可以使用del语句删除一些数字对象的引用,使用del语句语法如下:
css
del var1[,var2[,var3[....,varN]]]
3.可以通过使用del语句删除单个或多个对象的引用,例如:
python
del var #删除单个对象引用
del var_a, var_b #删除多个对象引用
注:数据类型是不允许改变的,这就意味着如果改变数字数据类型的值,将重新分配内存空间。
🧮示例代码:
python
# -*- coding:utf-8 -*-
# 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行
# 2.注释:包括记录创建时间,创建人,项目名称。
'''
Created on 2025-08-18
@author: 北京-宏哥
北京宏哥(微信搜索:北京宏哥,关注宏哥,提前解锁更多测试干货!)
Project: Python零基础从入门到精通详细教程11 - python数据类型之数字(Number)-浮点型(float)详解
'''
# 3.导入模块
a = 10 # 创建数字对象10。
a = 20 # 创建数字对象20,并将20赋值给变量a,a不再指向数字对象10
以上代码中,发生了变化的是变量a的指向,而不是数字对象1变成了数字对象2。初学者可能会比较迷糊,但不要紧,我们要试着理解去明白它。如下图所示:

3.数字类型分类
Python中有四种基本的数字类型:int、float、bool和complex。有的初学者、小伙伴或者童鞋们以及很多网上教程很容易忽略的一点就是bool也是数字类型,这在很多面试题中也可能会被问到或者涉及。为了大家能够清晰地、一目了然的看到数字类型的分类,宏哥画了一个思维导图,如下图所示:

3.1每种类型用途和特点
Python中有四种基本的数字类型:int、float、bool和complex。每种类型都有其特定的用途和特点。
🔢 整型(int):整型用于表示正整数、负整数和0。它的取值范围是无限的,可以表示任意大小的整数。
📊 浮点型(float):浮点型用于表示带有小数点的数值。它的取值范围也是无限的,可以表示非常大的浮点数。
🔄 布尔型(bool):布尔型用于表示真(True)或假(False)两种状态。它常用于逻辑运算和控制语句。布尔型是整型的子类,True相当于1,False相当于0。
🌐 复数型(complex):复数型由实部和虚部组成,可以用a + bj的形式表示,其中a为实部,b为虚部。在Python中,可以使用complex函数创建一个复数,例如:a = complex(66, 88)。
要区分这些数据类型,可以使用type函数和isinstance函数。type函数用于获取某个变量的数据类型,而isinstance函数用于判断某个变量是否为某个数据类型的实例(包括父类实例和子类实例)。
通过这些数据类型,Python提供了丰富的数据处理能力,无论是整数计算、浮点数运算还是布尔逻辑,Python都能轻松应对。
3.2数字类型实例
整型、浮点型和复数型的实例如下表所示:
int | float | complex |
---|---|---|
10 | 0.0 | 3.14j |
100 | 15.20 | 45.j |
-786 | -21.9 | 9.322e-36j |
080 | 32.3e+18 | .876j |
-0490 | -90. | -.6545+0J |
-0x260 | -32.54e100 | 3e+26J |
0x69 | 70.2E-12 | 4.53e-7j |
Python 还支持复数,复数由实数部分和虚数部分构成,可以用 a + bj,或者 complex(a,b) 表示, 复数的实部 a 和虚部 b 都是浮点型。
4.浮点型
浮点型用于表示存储的数据是实数,带有小数点的数值。它的取值范围也是无限的,可以表示非常大的浮点数。浮点数用于表示带有小数部分的数值。它们在科学计算和工程领域非常有用。例如,3.14159、-2.71828和0.0都是浮点数。浮点数在计算机编程中扮演着重要的角色。它们是一种特殊的数据类型,用于存储和处理小数或实数。在Python中,浮点数是由小数点分隔的数字组成的。浮点数也就是小数,如1.23,3.14,-9.01,等等。但是对于很大或很小的浮点数,一般用科学计数法表示,把10用e替代,1.23x10^9就是1.23e9,或者12.3e8,0.000012可以写成1.2e-5,等等。
4.1浮点型的定义和特点
浮点型是用于表示带有小数部分的数字。在计算机中,浮点数通常以科学记数法的形式存储,其中包含一个尾数和一个指数。Python使用双精度64位来表示浮点数,这意味着它可以表示的范围非常大,但由于存储位数有限,可能会出现精度问题。在Python中,浮点数必须有小数部分,小数部分可以是0。
浮点数的重要特点是它们能够表示比整数更广泛的数值范围,因为浮点数使用了指数来扩大范围。例如,3.14
和0.001
都是浮点数。
4.2浮点型的创建和赋值
4.2.1直接使用小数字面量
在Python中,可以直接使用小数字面量来创建浮点型对象,并将其赋值给一个变量。例如:
🧮示例代码:
python
# -*- coding:utf-8 -*-
# 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行
# 2.注释:包括记录创建时间,创建人,项目名称。
'''
Created on 2025-08-18
@author: 北京-宏哥
北京宏哥(微信搜索:北京宏哥,关注宏哥,提前解锁更多测试干货!)
Project: Python零基础从入门到精通详细教程11 - python数据类型之数字(Number)-浮点型(float)详解
'''
# 3.导入模块
x = 123.56
y = float(3.14)
z = 2e3 # 2*10^3 = 2000.0
print(type(x),type(y),type(z),x,y,z) # 输出 <class 'float'> <class 'float'> <class 'float'> 123.56 3.14 2000.0
🔍运行结果:

4.2.2使用赋值语句
在Python中,可以使用赋值语句将一个浮点型对象的值赋给另一个变量。例如:
🧮示例代码:
python
# -*- coding:utf-8 -*-
# 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行
# 2.注释:包括记录创建时间,创建人,项目名称。
'''
Created on 2025-08-18
@author: 北京-宏哥
北京宏哥(微信搜索:北京宏哥,关注宏哥,提前解锁更多测试干货!)
Project: Python零基础从入门到精通详细教程11 - python数据类型之数字(Number)-浮点型(float)详解
'''
# 3.导入模块
# 创建一个浮点型对象,123.56,将其赋值给变量x
x = 123.56
# 将变量x的值赋值给变量y, 此时变量y也引用了同一个浮点型对象
y=x
print(type(y),y)
🔍运行结果:

4.2.3运算
在python中,可以通过进行算数运算来创建和赋值类型对象。例如:
🧮示例代码:
python
# -*- coding:utf-8 -*-
# 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行
# 2.注释:包括记录创建时间,创建人,项目名称。
'''
Created on 2025-08-18
@author: 北京-宏哥
北京宏哥(微信搜索:北京宏哥,关注宏哥,提前解锁更多测试干货!)
Project: Python零基础从入门到精通详细教程11 - python数据类型之数字(Number)-浮点型(float)详解
'''
# 3.导入模块
# 通过加法运算,创建一个新的浮点型对象,其值为8.0,并将其赋值给变量x
x = 5.0 + 3.0
# 减法
y = 10.0 - 8.0
# 乘法
z = 2.0 * 3.0
# 除法
q = 8.0 / 2.0
print(type(x),type(y),type(z),type(q))
print(x,y,z,q)
🔍运行结果:

4.2.4float函数
除了直接赋值外,可以使用float()
函数将其他数据类型转换为浮点型。
🧮示例代码:
python
# -*- coding:utf-8 -*-
# 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行
# 2.注释:包括记录创建时间,创建人,项目名称。
'''
Created on 2025-08-18
@author: 北京-宏哥
北京宏哥(微信搜索:北京宏哥,关注宏哥,提前解锁更多测试干货!)
Project: Python零基础从入门到精通详细教程11 - python数据类型之数字(Number)-浮点型(float)详解
'''
# 3.导入模块
a = float(6) # 转换整数为浮点型,结果为6.0
b = float('15') # 转换字符串为浮点型,结果为15.0
print(a,b)
print(type(a),type(b))
🔍运行结果:

在这个例子中,6是一个整数,而a是从整数转换而来的浮点数。float()函数还可以用于将字符串转换为浮点数,只要字符串的内容是一个有效的数字表示。使用float()函数时需要注意,如果字符串不是有效的数字表示,Python将抛出ValueError异常。
4.3浮点型运算符
浮点型变量支持加、减、乘、除和幂等运算,这些运算的结果也是浮点型。
4.3.1加法(+)
就是做数学中的加法运算,把两个数相加求和。
🧮示例代码:
python
# -*- coding:utf-8 -*-
# 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行
# 2.注释:包括记录创建时间,创建人,项目名称。
'''
Created on 2025-08-18
@author: 北京-宏哥
北京宏哥(微信搜索:北京宏哥,关注宏哥,提前解锁更多测试干货!)
Project: Python零基础从入门到精通详细教程11 - python数据类型之数字(Number)-浮点型(float)详解
'''
# 3.导入模块
a = 3.3
b = 2.5
c = a + b
print(type(c),c) # 5.8
🔍运行结果:

4.3.2减法(-)
就是做数学中的减法运算,把两个数相减求差。
🧮示例代码:
python
# -*- coding:utf-8 -*-
# 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行
# 2.注释:包括记录创建时间,创建人,项目名称。
'''
Created on 2025-08-18
@author: 北京-宏哥
北京宏哥(微信搜索:北京宏哥,关注宏哥,提前解锁更多测试干货!)
Project: Python零基础从入门到精通详细教程11 - python数据类型之数字(Number)-浮点型(float)详解
'''
# 3.导入模块
a = 3.3
b = 2.3
c = a - b
print(type(c),c) # 1.0
🔍运行结果:

4.3.3乘法(*)
就是做数学中的乘法运算,把两个数相乘求积。
🧮示例代码:
python
# -*- coding:utf-8 -*-
# 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行
# 2.注释:包括记录创建时间,创建人,项目名称。
'''
Created on 2025-08-18
@author: 北京-宏哥
北京宏哥(微信搜索:北京宏哥,关注宏哥,提前解锁更多测试干货!)
Project: Python零基础从入门到精通详细教程11 - python数据类型之数字(Number)-浮点型(float)详解
'''
# 3.导入模块
a = 3.3
b = 2.5
c = a * b
print(type(c),c) # 8.25
🔍运行结果:

4.3.4除法(/)
就是做数学中的除法运算,把两个数相除求商。
🧮示例代码:
python
# -*- coding:utf-8 -*-
# 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行
# 2.注释:包括记录创建时间,创建人,项目名称。
'''
Created on 2025-08-18
@author: 北京-宏哥
北京宏哥(微信搜索:北京宏哥,关注宏哥,提前解锁更多测试干货!)
Project: Python零基础从入门到精通详细教程11 - python数据类型之数字(Number)-浮点型(float)详解
'''
# 3.导入模块
a = 3.5
b = 2.5
c = a / b
print(type(c),c) # 1.4
🔍运行结果:

4.3.5整除(//)
就是做数学中的整除,把两个数相整除求商。只返回商,不返回余数。
🧮示例代码:
python
# -*- coding:utf-8 -*-
# 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行
# 2.注释:包括记录创建时间,创建人,项目名称。
'''
Created on 2025-08-18
@author: 北京-宏哥
北京宏哥(微信搜索:北京宏哥,关注宏哥,提前解锁更多测试干货!)
Project: Python零基础从入门到精通详细教程11 - python数据类型之数字(Number)-浮点型(float)详解
'''
# 3.导入模块
a = 7.5
b = 3.5
c = a // b
print(type(c),c) # 2.0 7.5整除3.5得2.0余0.5,返回商2.0,把商2.0赋值给c,所以c的值为2.0。
🔍运行结果:

4.3.6取余(%)
就是做数学中的取余运算,把两个数相整除,当不能整除时会有余数,就返回这个余数;当可以整除时,余数为0,就返回0。
🧮示例代码:
python
# -*- coding:utf-8 -*-
# 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行
# 2.注释:包括记录创建时间,创建人,项目名称。
'''
Created on 2025-08-18
@author: 北京-宏哥
北京宏哥(微信搜索:北京宏哥,关注宏哥,提前解锁更多测试干货!)
Project: Python零基础从入门到精通详细教程11 - python数据类型之数字(Number)-浮点型(float)详解
'''
# 3.导入模块
a = 7.5
b = 2
c = a % b
print(type(c),c) # 1.5 7.5整除2得3.0余1.5,返回余数1.5,把余数1.5赋值给c,所以c的值为1.5。
x = 7.5
y = 2.5
z = x % y
print(type(z),z) # 0.0 7.5是可以整除2.5的,但整除时也可以说余数为0.0。7.5整除2.5得3.0余0.0,返回余数0.0,把余数0.0赋值给z,所以z的值为0.0。
🔍运行结果:

4.3.7幂运算(**)
就是做数学中的幂运算,求x的n次方。
🧮示例代码:
python
# -*- coding:utf-8 -*-
# 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行
# 2.注释:包括记录创建时间,创建人,项目名称。
'''
Created on 2025-08-18
@author: 北京-宏哥
北京宏哥(微信搜索:北京宏哥,关注宏哥,提前解锁更多测试干货!)
Project: Python零基础从入门到精通详细教程11 - python数据类型之数字(Number)-浮点型(float)详解
'''
# 3.导入模块
a = 5.5
b = 2
c = a ** b
print(type(c),c) # 30.25 求a的b次方,a的值为5.5,b的值为2。所以就是5.5的2次方等于30.25,所以c的值为30.25。
🔍运行结果:

4.3.8身份运算符
浮点型数据其实不太需要身份运算符来判断两个整型数据的内存地址是否一致。因为浮点型数据具有不可变的特性,这就导致了只要两个浮点型数据的值相等,它们的内存地址就是一样的。所以我们完全可以使用==和!=来代替身份运算符在浮点型中的作用,但我们不要把==和!=与身份运算符搞混了。==和!=判断的是值是否相等,而身份运算符判断的是内存地址是否相同。对于可变的数据类型来说,即使它们的值相等,它们的内存地址也是不同的。
1.身份运算(is)
is用于判断左右两个对象的内存地址是否相同,如果相同返回True,不同返回False。举个例子,请看下面的代码:
🧮示例代码:
python
# -*- coding:utf-8 -*-
# 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行
# 2.注释:包括记录创建时间,创建人,项目名称。
'''
Created on 2025-08-18
@author: 北京-宏哥
北京宏哥(微信搜索:北京宏哥,关注宏哥,提前解锁更多测试干货!)
Project: Python零基础从入门到精通详细教程11 - python数据类型之数字(Number)-浮点型(float)详解
'''
# 3.导入模块
a = 1.5
b = 1.5
print(id(a)) # 内存地址:1641575181264
print(id(b)) # 内存地址:1641575181264
print(a is b) # True
🔍运行结果:

a和b都是浮点型1.5,因为浮点型是不可变的数据类型,所以两个相同的浮点型数据一定取自同一个地方。我们可以使用id函数来查看python中任意对象的内存地址,使用id函数后我们发现a和b的内存地址确实是相同的。a和b所代表的浮点型数据1.5取自内存中的同一个地方,所以a is b返回True。
🧮示例代码:
python
# -*- coding:utf-8 -*-
# 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行
# 2.注释:包括记录创建时间,创建人,项目名称。
'''
Created on 2025-08-18
@author: 北京-宏哥
北京宏哥(微信搜索:北京宏哥,关注宏哥,提前解锁更多测试干货!)
Project: Python零基础从入门到精通详细教程11 - python数据类型之数字(Number)-浮点型(float)详解
'''
# 3.导入模块
a = 1.5
b = 2.5
print(id(a)) # 内存地址:1415926344656
print(id(b)) # 内存地址:1415921505360
print(a is b) # False
🔍运行结果:

a是浮点型1.5,b是浮点型2.5。因为浮点型数据1.5和2.5存放在内存中不同的地方,所以a is b返回False。
2.身份运算(is not)
is not用于判断左右两个对象的内存地址是否不同,如果不同返回True,相同返回False。刚好与is相反。举个例子,请看下面的代码:
🧮示例代码:
python
# -*- coding:utf-8 -*-
# 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行
# 2.注释:包括记录创建时间,创建人,项目名称。
'''
Created on 2025-08-18
@author: 北京-宏哥
北京宏哥(微信搜索:北京宏哥,关注宏哥,提前解锁更多测试干货!)
Project: Python零基础从入门到精通详细教程11 - python数据类型之数字(Number)-浮点型(float)详解
'''
# 3.导入模块
a = 1.5
b = 2.5
print(id(a)) # 内存地址:1415926344656
print(id(b)) # 内存地址:1415921505360
print(a is not b) # True
🔍运行结果:

a是浮点型1.5,b是浮点型2.5。因为浮点型数据1.5和2.5存放在内存中不同的地方,所以a is not b返回True。
🧮示例代码:
python
# -*- coding:utf-8 -*-
# 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行
# 2.注释:包括记录创建时间,创建人,项目名称。
'''
Created on 2025-08-18
@author: 北京-宏哥
北京宏哥(微信搜索:北京宏哥,关注宏哥,提前解锁更多测试干货!)
Project: Python零基础从入门到精通详细教程11 - python数据类型之数字(Number)-浮点型(float)详解
'''
# 3.导入模块
a = 1.5
b = 1.5
print(id(a)) # 内存地址:2191498046416
print(id(b)) # 内存地址:2191498046416
print(a is not b) # False
🔍运行结果:

a和b都是浮点型1.5,a和b所代表的浮点型数据1.5取自内存中的同一个地方,所以a is not b返回False。
新手常踩雷 :需要注意的是类似整型2和浮点型2.0这种数据,它们的大小是一样的,使用==来判断时它们是相等的。但是它们分别属于两种数据类型,所以它们的内存地址是不一样的。请看如下代码:
🧮示例代码:
python
# -*- coding:utf-8 -*-
# 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行
# 2.注释:包括记录创建时间,创建人,项目名称。
'''
Created on 2025-08-18
@author: 北京-宏哥
北京宏哥(微信搜索:北京宏哥,关注宏哥,提前解锁更多测试干货!)
Project: Python零基础从入门到精通详细教程11 - python数据类型之数字(Number)-浮点型(float)详解
'''
# 3.导入模块
a = 2
b = 2.0
print(id(a)) # 内存地址:140733443872560
print(id(b)) # 内存地址:2023885401040
print(a == b) # True
print(a is b) # False
🔍运行结果:

4.4浮点型书写格式
浮点型数据默认有两种书写格式,分别为十进制和科学计数格式。在科学计数格式中,E或者e代表基数10,其后的数字代表指数。对于极大或极小的数值,使用科学计数法表示浮点数是非常方便的。科学计数法使用字母e
或E
表示10的幂。这种表示方法不仅简洁,而且能够有效地表示非常大的或非常小的数值,避免在代码中出现冗长的数字。
🧮示例代码:
python
# -*- coding:utf-8 -*-
# 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行
# 2.注释:包括记录创建时间,创建人,项目名称。
'''
Created on 2025-08-18
@author: 北京-宏哥
北京宏哥(微信搜索:北京宏哥,关注宏哥,提前解锁更多测试干货!)
Project: Python零基础从入门到精通详细教程11 - python数据类型之数字(Number)-浮点型(float)详解
'''
# 3.导入模块
f1 = 3.14 #十进制格式
f2 = 3.14e-2 #科学计数格式,等价于3.14 * 10 ** -2 = 0.0314
f3 = 3.14e4 #科学计数格式,等价于3.14 * 10 ** 4 = 31400.0
print(type(f1),f1)
print(type(f2),f2,3.14 * 10 ** -2)
print(type(f3),f3,3.14 * 10 ** 4 )
🔍运行结果:

4.5转换浮点型类型
Python的内置函数float()
可以将其他类型的数值转换为浮点型。这对于需要从其他数据类型转换为浮点型的场景非常有用。float()
函数还可以用于将字符串转换为浮点数,只要字符串的内容是一个有效的数字表示。使用float()
函数时需要注意,如果字符串不是有效的数字表示,Python将抛出ValueError
异常。
🧮示例代码:
python
# -*- coding:utf-8 -*-
# 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行
# 2.注释:包括记录创建时间,创建人,项目名称。
'''
Created on 2025-08-18
@author: 北京-宏哥
北京宏哥(微信搜索:北京宏哥,关注宏哥,提前解锁更多测试干货!)
Project: Python零基础从入门到精通详细教程11 - python数据类型之数字(Number)-浮点型(float)详解
'''
# 3.导入模块
f1 = float(3) # 整数转换浮点型
print(type(f1),f1)
f2 = float("123") # 字符串转换浮点型
print(type(f2),f2)
f3 = float("北京宏哥") # 字符串不是有效的数字
print(type(f3),f3)
🔍运行结果:

返回从数字或字符串 x 生成的浮点数。
css
class float([x])
- x 如果是字符串,则它必须是只包含十进制数字的字符串,字符串前面可以有符号(
+
或-
),之前也可以有空格。 - x 也可以是 NaN(非数字)、正负无穷大的字符串。
- x 如果是整数或浮点数,则返回具有相同值(在 Python 浮点精度范围内)的浮点数。如果实参在 Python 浮点精度范围外,则会触发
OverflowError
。 - x 如果没有实参,则返回
0.0
。
🧮示例代码:
python
# -*- coding:utf-8 -*-
# 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行
# 2.注释:包括记录创建时间,创建人,项目名称。
'''
Created on 2025-08-18
@author: 北京-宏哥
北京宏哥(微信搜索:北京宏哥,关注宏哥,提前解锁更多测试干货!)
Project: Python零基础从入门到精通详细教程11 - python数据类型之数字(Number)-浮点型(float)详解
'''
# 3.导入模块
#示例一:
result1 = float('23')
print('result1 = ', result1)
result2 = float('+23') # 字符串前可以有 + 符号,不影响结果
print('result2 = ', result2)
result3 = float('-23') # 字符串前可以有 - 符号,影响结果
print('result3 = ', result3)
result4 = float(' 23') # 字符串前可以有空格
print('result4 = ', result4)
#示例二:
result5 = float('NaN') # 实参也可以是非数字 NaN
print('result5 = ', result5)
#示例三:
result6 = float() # 没有实参
print('result6 = ', result6)
🔍运行结果:

4.6浮点型取值范围
在python中,浮点型的取值范围大约在**-1.8e308 ~** 1.8e308,超出这个范围python会将其视为无穷大(inf)或者无穷小(-inf)。
🧮示例代码:
python
# -*- coding:utf-8 -*-
# 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行
# 2.注释:包括记录创建时间,创建人,项目名称。
'''
Created on 2025-08-18
@author: 北京-宏哥
北京宏哥(微信搜索:北京宏哥,关注宏哥,提前解锁更多测试干货!)
Project: Python零基础从入门到精通详细教程11 - python数据类型之数字(Number)-浮点型(float)详解
'''
# 3.导入模块
print(5e309) #打印结果为 inf
print(-5e309) #打印结果为 -inf
🔍运行结果:

5.浮点型应用场景
浮点型广泛应用于科学计算、工程计算、统计分析等领域。在这些领域中,通常需要处理带有小数的数值。
在数据分析中,浮点型用于计算平均值、标准差等统计量;在物理模拟中,用于表示物体的位置、速度、加速度等连续变化的量。
🧮示例代码:
python
# -*- coding:utf-8 -*-
# 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行
# 2.注释:包括记录创建时间,创建人,项目名称。
'''
Created on 2025-08-18
@author: 北京-宏哥
北京宏哥(微信搜索:北京宏哥,关注宏哥,提前解锁更多测试干货!)
Project: Python零基础从入门到精通详细教程11 - python数据类型之数字(Number)-浮点型(float)详解
'''
# 3.导入模块
import math
radius = 5.0
area_of_circle = math.pi * radius**2
print("Circle Area:", area_of_circle)
🔍运行结果:

在上面的例子中,使用浮点型计算圆的面积,其中math.pi
是一个浮点型常量,表示圆周率。
6.浮点型注意事项
6.1浮点型的精度问题
尽管浮点数可以表示非常大的范围,但由于计算机的存储限制,它们在表示某些数值时可能会出现精度问题。这是因为浮点数在计算机中是以二进制形式存储的,而某些十进制小数无法精确转换为二进制小数。浮点数精度极限导致。
🧮示例代码:
python
# -*- coding:utf-8 -*-
# 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行
# 2.注释:包括记录创建时间,创建人,项目名称。
'''
Created on 2025-08-18
@author: 北京-宏哥
北京宏哥(微信搜索:北京宏哥,关注宏哥,提前解锁更多测试干货!)
Project: Python零基础从入门到精通详细教程11 - python数据类型之数字(Number)-浮点型(float)详解
'''
# 3.导入模块
print(int(2.9999999999999999)) # 输出 3
🔍运行结果:

再例如,0.1
在二进制中没有一个精确的表示形式,导致在进行精度敏感计算时可能会出现误差。
🧮示例代码:
python
# -*- coding:utf-8 -*-
# 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行
# 2.注释:包括记录创建时间,创建人,项目名称。
'''
Created on 2025-08-18
@author: 北京-宏哥
北京宏哥(微信搜索:北京宏哥,关注宏哥,提前解锁更多测试干货!)
Project: Python零基础从入门到精通详细教程11 - python数据类型之数字(Number)-浮点型(float)详解
'''
# 3.导入模块
result = 0.1 + 0.2
print(result) # 输出 0.30000000000000004
🔍运行结果:

在此例中,由于浮点精度问题,0.1 + 0.2
的结果并不是精确的0.3
。为了处理这种情况,通常使用Python的decimal
模块,该模块提供了更高精度的数值表示。
6.2使用decimal
模块提高精度
对于需要更高精度的场合,Python提供了decimal
模块。它允许用户指定精度,并提供了比内置浮点类型更高的精度。
🧮示例代码:
python
# -*- coding:utf-8 -*-
# 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行
# 2.注释:包括记录创建时间,创建人,项目名称。
'''
Created on 2025-08-18
@author: 北京-宏哥
北京宏哥(微信搜索:北京宏哥,关注宏哥,提前解锁更多测试干货!)
Project: Python零基础从入门到精通详细教程11 - python数据类型之数字(Number)-浮点型(float)详解
'''
# 3.导入模块
from decimal import Decimal
value1 = Decimal('0.1')
value2 = Decimal('0.2')
result = value1 + value2
print(result) # 输出 0.3
🔍运行结果:

6.3round()
函数
为了处理这种情况,可以使用 round()
函数来四舍五入到指定的小数位数。
🧮示例代码:
python
# -*- coding:utf-8 -*-
# 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行
# 2.注释:包括记录创建时间,创建人,项目名称。
'''
Created on 2025-08-18
@author: 北京-宏哥
北京宏哥(微信搜索:北京宏哥,关注宏哥,提前解锁更多测试干货!)
Project: Python零基础从入门到精通详细教程11 - python数据类型之数字(Number)-浮点型(float)详解
'''
# 3.导入模块
e = 0.1 + 0.2 # 期望得到 0.3,但实际结果可能是 0.30000000000000004
f = round(e, 2) # f 的值是 0.3,四舍五入到两位小数
print(f)
🔍运行结果:

6.4比较运算
对浮点型变量进行比较运算时需要特别小心,因为精度问题可能导致意外的结果。在大多数情况下,比较两个浮点数是否相等是不安全的。更好的做法是比较它们是否"足够接近"。
🧮示例代码:
python
# -*- coding:utf-8 -*-
# 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行
# 2.注释:包括记录创建时间,创建人,项目名称。
'''
Created on 2025-08-18
@author: 北京-宏哥
北京宏哥(微信搜索:北京宏哥,关注宏哥,提前解锁更多测试干货!)
Project: Python零基础从入门到精通详细教程11 - python数据类型之数字(Number)-浮点型(float)详解
'''
# 3.导入模块
def is_close(a, b, rel_tol=1e-09, abs_tol=0.0):
return abs(a-b) <= max(rel_tol * max(abs(a), abs(b)), abs_tol)
g = 0.1 + 0.2
h = 0.3
if is_close(g, h):
print("g is close to h")
else:
print("g is not close to h")
🔍运行结果:

在编写涉及浮点数的代码时,理解浮点数的精度限制和比较问题是非常重要的。尽管Python的浮点型功能强大,但在进行财务计算或需要高精度计算的场合,可能需要使用专门的库(如decimal
模块)来确保计算的准确性。
7.浮点数不能和字符串进行拼接
浮点数和字符串之间不能进行拼接,否则会报错!!!。这是本节的重点,初学者容易在这里出错!!!
🧮示例代码(错误):
python
# -*- coding:utf-8 -*-
# 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行
# 2.注释:包括记录创建时间,创建人,项目名称。
'''
Created on 2025-08-18
@author: 北京-宏哥
北京宏哥(微信搜索:北京宏哥,关注宏哥,提前解锁更多测试干货!)
Project: Python零基础从入门到精通详细教程11 - python数据类型之数字(Number)-浮点型(float)详解
'''
# 3.导入模块
#圆的半径为2.5
#变量名为r,数据类型为浮点数
r = 2.5
str_1="圆的半径为:"
#原样输出:圆的半径为2.5
#字符串+浮点数程序报错
print(str_1 + r)
print(number + str_1)
🔍运行结果:

运行程序后提示can only concatenate str (not "float") to str
即只能将字符串(非浮点数)与字符串相连接。
若变量r为字符串类型则可以进行拼接。
🧮示例代码:
python
# -*- coding:utf-8 -*-
# 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行
# 2.注释:包括记录创建时间,创建人,项目名称。
'''
Created on 2025-08-18
@author: 北京-宏哥
北京宏哥(微信搜索:北京宏哥,关注宏哥,提前解锁更多测试干货!)
Project: Python零基础从入门到精通详细教程11 - python数据类型之数字(Number)-浮点型(float)详解
'''
# 3.导入模块
#圆的半径为2.5
#变量名为r,数据类型为字符串
r="2.5"
str_1="圆的半径为"
#原样输出:圆的半径为2.5
#字符串+字符串√
print(str_1+r)
🔍运行结果:

8.随堂练习
【练习1】请问以下三个数据"520.0"
、520.0
、520
的数据类型分别为:
【答案解析】
"520.0"
有引号,数据类型为字符串。 520.0
没有引号,有点,数据类型为浮点数。 520
没有引号,没有点,数据类型为整数。
【练习2】猜猜看下面两行代码的输出分别为什么?
🧮示例代码:
python
# -*- coding:utf-8 -*-
# 1.先设置编码,utf-8可支持中英文,如上,一般放在第一行
# 2.注释:包括记录创建时间,创建人,项目名称。
'''
Created on 2025-08-18
@author: 北京-宏哥
北京宏哥(微信搜索:北京宏哥,关注宏哥,提前解锁更多测试干货!)
Project: Python零基础从入门到精通详细教程11 - python数据类型之数字(Number)-浮点型(float)详解
'''
# 3.导入模块
print('1.1'+'1')
print(1.1+1)
🔍运行结果:

9.小结
Python提供了多种定义浮点型的方法,包括直接赋值、使用float()
函数和科学计数法。虽然浮点型提供了广泛的数值表示范围,但在某些情况下可能会出现精度问题。对于需要高精度的场合,decimal
模块是一个很好的解决方案。理解浮点型的特性及其限制,可以帮助开发者在实际应用中更好地利用它们。
9.1注意事项
浮点数使用时,需要注意以下几点:
- 精度问题 :由于计算机内部表示浮点数的方式有限,float类型的数值可能会存在精度问题。在进行高精度要求或金融计算时,应使用专门的库如decimal模块(如上例)。
- 溢出与下溢 :当float变量表示的数值超出了其表示范围时,可能会发生溢出或下溢。在进行大规模计算或处理大量数据时,应注意这种情况并采取相应的处理措施。
- 比较操作 :由于浮点数的精度问题,直接比较两个浮点数是否相等可能不准确。通常使用相对误差或绝对误差的方法来判断两个浮点数是否足够接近。
- 舍入问题 :在进行数值计算时,舍入错误是一种常见的问题。为了减少舍入误差的影响,可以使用适当的方法如四舍五入、银行家舍入等。
- 使用第三方库 :对于复杂的高精度计算或特殊数学函数,可以使用第三方库如NumPy或SciPy来提供更多的功能和更高的精度。
- 内存消耗 :由于浮点数需要更多的内存来存储,当处理大量浮点数时,需要注意内存的消耗情况。根据实际情况选择合适的数据结构和算法来降低内存消耗。
9.2相关问题答疑
如何在Python中创建浮点数?
在Python中,浮点数可以通过直接赋值来定义。只需在数字中包含小数点,例如,3.14
或 -0.001
。你也可以使用科学计数法,例如 2.5e3
表示2500. 此外,Python还支持负浮点数和零浮点数。
在Python中浮点数的精度问题是什么?
浮点数在计算机中以二进制形式存储,这可能导致某些浮点数的表示不完全精确。例如,0.1 + 0.2
的结果并不是 0.3
,而是接近于 0.3
。了解这一点对于进行数学运算和比较浮点数时非常重要。
如何在Python中格式化浮点数输出?
使用 format()
函数或者f字符串可以轻松格式化浮点数输出。比如,"{:.2f}".format(3.14159)
会输出 3.14
。另外,使用f字符串可以这样写:f"{3.14159:.2f}"
,也能达到相同的效果。这种方式使得输出更加美观且符合要求。
为什么0.1加0.2不等于0.3?
这个知识点,初学者不需要深究。能看懂最好,看不懂也没关系,可以慢慢来。我们去执行下面这段代码:
ini
a = 0.1 + 0.2
print(a) # 0.30000000000000004
我们从执行的结果中可以发现打印出a的值为0.30000000000000004,这个值跟我们预想的值0.3有一些区别。为什么python在处理小数之间的计算时,会出现这种计算得不准确的情况。其实这和python没什么关系,可以说任何的编程语言都会遇到这种情况。这和计算机CPU的计算逻辑有关,因为绝大多数CPU只能处理2进制数据,CPU中的全加逻辑电路是根据处理2进制数来设计的。当然我们也可以设计出处理10进制数的全加逻辑电路,但这种电路需要更大的空间和消耗更多的资源,所以我们会采用更简单的电路。毕竟2进制跟电路跟相配。
现在我们知道了CPU只会做2进制的算数,在处理10进制数时,需要先把10进制数转换为2进制数。所有的10进制整数都能完美的转换为2进制数,但10进制的小数就不一定能完美的转换为2进制的小数了。例如10进制的0.1,我们来手动转换一下,看能不能完美的转换为2进制小数。我们这里采用乘以2的方式来转换,我们第一次计算把0.1✖2,判断结果是否大于1,如果结果小于1,2进制的第一位小数为0,如果结果大于1,把个位的1减掉并且2进制的第一位小数为1。我们第二次计算把第一次计算的结果✖2,判断结果是否大于1,如果结果小于1,2进制的第二位小数为0,如果结果大于1,把个位的1减掉并且2进制的第二位小数为1...以此类推直到10进制数为0。推导结果如下:
ini
第1次 0.1 * 2 = 0.2 小于1 2进制小数为0.0
第2次 0.2 * 2 = 0.4 小于1 2进制小数为0.00
第3次 0.4 * 2 = 0.8 小于1 2进制小数为0.000
第4次 0.8 * 2 = 1.6 大于1 2进制小数为0.0001 这里需要把1.6 - 1 = 0.6
第5次 0.6 * 2 = 1.2 大于1 2进制小数为0.00011 这里需要把1.2 - 1 = 0.2
第6次 0.2 * 2 = 0.4 小于1 2进制小数为0.000110
第7次 0.4 * 2 = 0.8 小于1 2进制小数为0.0001100
第8次 0.8 * 2 = 1.6 大于1 2进制小数为0.00011001 这里需要把1.6 - 1 = 0.6
第9次 0.6 * 2 = 1.2 大于1 2进制小数为0.000110011 这里需要把1.2 - 1 = 0.2
第10次 0.2 * 2 = 0.4 小于1 2进制小数为0.0001100110
.....
.....
无限循环,根本算不完
从上面的推导中,不知道大家有没有看出来,从第6次计算就已经开始循环了。所以10进制的0.1用2进制数不能完美的表示出来,只能用近似值来表示。由于CPU在计算0.1加0.2时,使用的是近似值,所以计算出来的结果就会和理论值存在误差。我们怎样消除这个误差呢?
第一种方法,使用round函数来截取小数。round函数需要传入两个参数,第一个参数为需要处理的数据,第二个参数为要保留的小数位数。前边已经讲过这里不赘述。
第二种方法,把0.1和0.2分别乘以10变为1和2,再用1加2得到3,再用3除以10得到0.3。我推荐使用这种方式,需要注意的是加减和乘除在最后除以10的时候有区别。如果是计算0.1乘以0.2,把0.1和0.2分别乘以10变为1和2,再用1乘以2得到2,再用2除以100得到0.02。 第三种方法,使用decimal
模块允许用户以字符串形式输入数值,以避免二进制表示的误差。通过这种方式,可以确保计算结果的精确性。这个前边也说过,这里不再赘述。