目录
- Python数据类型详解之数字
- Python中的数字类型
- 类型转换
- Python小数
Python数据类型详解之数字
在本文中,您将了解Python中使用的不同数字、如何从一种数据类型转换为另一种数据类型。
Python中的数字类型
Python支持整数、浮点数和复数。它们在Python中被定义为int、float和复杂类。
整数和浮点数之间用小数点的存在或不存在来分隔。例如,5是整数,而5.0是浮点数。
复数的形式是x + yj,其中x是实部,y是虚部。
我们可以使用type()函数来知道变量或值属于哪个类,使用isinstance()函数来检查它是否属于某个特定的类。
让我们看一个例子:
a = 5
print(type(a))
print(type(5.0))
c = 5 + 3j
print(c + 3)
print(isinstance(c, complex))
当我们运行上面的程序时,我们得到如下输出:
<class 'int'>
<class 'float'>
(8+3j)
True
整数可以是任意长度,而浮点数的精度仅为小数点后15位(第16位是不准确的)。
我们每天处理的数字都是十进制(以10为基数)数字系统。但是计算机程序员(通常是嵌入式程序员)需要使用二进制(以2为基数)、十六进制(以16为基数)和八进制(以8为基数)的数字系统。
类型转换
我们可以把一种数转换成另一种数。这也被称为强制。
如果其中一个操作数是浮点数,像加法、减法这样的操作会隐式(自动)强制整型为浮点数。
>>> 1 + 2.0
3.0
们可以看到,1(整数)被强制转换为1.0(浮点数)用于加法,结果也是一个浮点数。
我们也可以使用内置函数,如int()、float()和complex()来显式地在类型之间转换。这些函数甚至可以从字符串转换。
>>> int(2.3)
2
>>> int(-2.8)
-2
>>> float(5)
5.0
>>> complex('3+5j')
(3+5j)
当从浮点数转换为整数时,数字被截断(小数部分被删除)。
Python小数
Python内置类float执行的一些计算可能会让我们感到惊讶。我们都知道1.1和2.2的和是3.3,但Python似乎不同意。
>>> (1.1 + 2.2) == 3.3
False
这是怎么回事? 因为计算机只能理解二进制(0和1),所以浮点数在计算机硬件中被实现为二进制小数。由于这个原因,我们知道的大多数小数都不能准确地存储在我们的计算机中。
举个例子。我们不能用小数表示分数1/3。这将得到0.33333333…它无限长,我们只能近似。
>>> 1.1 + 2.2
3.3000000000000003
为了克服这个问题,我们可以使用Python附带的十进制模块。浮点数的精度最高可达15位小数,而十进制模块具有用户可设置的精度。
让我们看看区别:
import decimal
print(0.1)
print(decimal.Decimal(0.1))
输出
0.1
0.1000000000000000055511151231257827021181583404541015625
这个模块用于我们在学校学过的十进制计算。
它也保留了意义。我们知道,25.50公斤比25.5公斤更准确,因为它有两位小数点后1位。
from decimal import Decimal as D
print(D('1.1') + D('2.2'))
print(D('1.2') * D('2.50'))
输出
3.3
3.000
注意上面例子中末尾的零。
我们可能会问,为什么不每次都实现Decimal而不是float呢?主要原因是效率。浮点运算比十进制运算快得多。