目录

  • 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呢?主要原因是效率。浮点运算比十进制运算快得多。