Menu Close

Python 数字类型,类型强制转换和隐形转换,Python 十进制,Python分数和数学模块

1.Python 中的数字数据类型

Python 支持整数数据类型,浮点数数据类型和复数数据类型。 在 Python 中,它们被定义为int,float和complex类。

整数和浮点由存在或不存在小数点分隔。 例如,5 是整数,而 5.0 是浮点数。

复数以x + yj的形式编写,其中x是实数部分,y是虚数部分。

我们可以使用type()函数来了解变量或值属于哪个类,并且可以使用isinstance()函数检查其是否属于特定类。

让我们看一个例子:

例1.1. 检查一个数字的数据类型

a = 5

print(type(a))

print(type(5.0))

c = 5 + 3j
print(c + 3)

print(isinstance(c, complex))

results

<class 'int'>
<class 'float'>
(8+3j)
True

尽管整数可以是任意长度,但浮点数最多只能精确到 15 个小数位(第 16 位不准确)。

我们每天处理的数字是十进制(以 10 为底)的数字系统。 但是计算机程序员(通常是嵌入式程序员)需要使用二进制(基数 2),十六进制(基数 16)和八进制(基数 8)数字系统。

在 Python 中,我们可以通过在数字之前添加前缀来表示这些数字。 下表列出了这些前缀。

数字系统 字首
二进制 ‘0b’或’0B’
八进制 ‘0o’或’0O’
十六进制 ‘0x’或’0X’

这里有些例子

例1.2. 二进制八进制十六进制数据类型的输出


# Output: 107
print(0b1101011)

# Output: 253 (251 + 2)
print(0xFB + 0b10)

# Output: 13
print(0o15)
结果
107
253
13

2.类型转换

我们可以将一种数字转换为另一种数字。 这也称为强制。

如果操作数之一为浮点型,则加法,减法等操作会强制整数隐式(自动)转换为浮点数。

例2.1 整数强制整数隐式(自动)转换为浮点数

# integer to float implicitly print(1 + 2.0) print (2-1.0) print (2*2.0)

结果

3.0
1.0
4.0

我们可以在上面看到 1(整数)被强制转换为 1.0(浮点数)以进行加法,结果也是一个浮点数。

我们还可以使用int(),float()和complex()之类的内置函数在类型之间进行显式转换。 这些函数甚至可以从字符串转换。

例2.2 数字数据类型的强制转换

# convert between types explicitly
print (int(2.3))
print(int(-2.8))
print(float(5))
print(complex('3+5j'))
2
-2
5.0
(3+5j)

从float转换为整数时,该数字将被截断(删除小数部分,不是四舍五入)。

3.Python 十进制

Python 内置类float会执行一些可能令我们惊讶的计算。 我们都知道 1.1 和 2.2 的总和是 3.3,但是 Python 似乎不同意。

>>> (1.1 + 2.2) == 3.3
False

到底是怎么回事?

事实证明,浮点数在计算机硬件中以二进制分数形式实现,因为计算机只能理解二进制(0 和 1)。 由于这个原因,我们知道的大多数十进制小数不能准确地存储在我们的计算机中。

让我们举个例子。 我们不能将分数 1/3 表示为十进制数。 这将给出 0.33333333… 无限长,我们只能对其进行近似。

事实证明,十进制小数 0.1 会导致无限长的二进制分数 0.000110011001100110011…,而我们的计算机仅存储了有限数量的二进制数。

这只会接近 0.1,但永远不会相等。 因此,这是我们计算机硬件的局限性,而不是 Python 中的错误。

>>> 1.1 + 2.2
3.3000000000000003

为了克服这个问题,我们可以使用 Python 随附的十进制模块。 浮点数的精度最高可以达到 15 个小数位,而十进制模块则具有用户可设置的精度。

让我们看一下区别:

例3.1 导入十进制模块
import decimal

print(0.1)

print(decimal.Decimal(0.1))

输出

0.1
0.1000000000000000055511151231257827021181583404541015625
 

当我们要在学校学习的十进制计算时,使用此模块。

我们知道 25.50 公斤比 25.5 公斤更准确,因为前者更精确到小数点后两位。

例3.2导入十进制模块进行精确计算

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? 主要原因是效率。 浮点运算必须比Decimal运算更快。

何时使用十进制代替浮点数?

在以下情况下,我们通常使用十进制。

  • 当我们编程需要精确表示十进制的金融应用时。
  • 当我们要控制所需的精度水平时。
  • 当我们想实现有效小数位的概念时。

4.Python 分数

Python 通过其fractions模块提供了涉及小数的运算。

小数具有分子和分母,它们都是整数。 该模块支持有理数算法。

我们可以通过多种方式创建Fraction对象。 让我们看看它们。

例4.1 python分数的应用
import fractions

print(fractions.Fraction(1.5))

print(fractions.Fraction(5))

print(fractions.Fraction(1,3))

输出

3/2
5
1/3

从float创建Fraction时,我们可能会得到一些异常的结果。 这是由于上一节中讨论的二进制浮点数表示不完善所致。

幸运的是,Fraction也允许我们使用字符串实例化。 使用十进制数字时,这是首选选项。

例4.2 分数以浮点数或字符串数据类型输出

import fractions

# As float
# Output: 2476979795053773/2251799813685248
print(fractions.Fraction(1.1))

# As string
# Output: 11/10
print(fractions.Fraction('1.1'))

输出

2476979795053773/2251799813685248
11/10
例4.3 python分数的运算
from fractions import Fraction as F

print(F(1, 3) + F(1, 3))

print(1 / F(5, 6))

print(F(-3, 10) > 0)

print(F(-3, 10) < 0)

输出

2/3
6/5
False
True
Python数学模块
Python数学模块

5.Python 数学模块

Python 提供math和random之类的模块来执行不同的数学运算,例如三角函数,对数,概率和统计等。

例5.1 数学模块

import math

print(math.pi)

print(math.cos(math.pi))

print(math.exp(10))

print(math.log10(1000))

print(math.sinh(1))

print(math.factorial(6))
结果
3.141592653589793
-1.0
22026.465794806718
3.0
1.1752011936438014
720


 

 

wer

除教程外,本网站大部分文章来自互联网,如果有内容冒犯到你,请联系我们删除!

发表回复

您的电子邮箱地址不会被公开。 必填项已用 * 标注

Leave the field below empty!

Posted in Python教程

Related Posts