[Python] 数字类型

概述

表示数字或数值的数据类型称为数字类型。

Python语言提供3种数字类型:整数、浮点数、复数,分别对应数学中的整数、实数和复数。

整数类型

简单介绍

整数类型与数学中整数的概念一致,下面是整数类型的例子:
1010,99,-123,0x9a,-0x89

整数类型共有4种进制表示:十进制、二进制、八进制和十六进制。默认情况,整数采用十进制,其他进制需要增加引导符号。
二进制数以 0b 引导,八进制数以 0o 引导,十六进制数以 0x 引导,字母大小写均可使用

进制种类描述
十进制默认情况,例如,1010,-123
二进制由字符 0 和 1 组成,例如,0b101,0B101
八进制由字符 0 到 7 组成,例如,0o456,0O456
十六进制由字符 0 到 9 、a 到 f、A 到 F 组成,例如,0xABC,0XABC

整数类型的取值范围

整数类型理论上的取值范围是[-∞,∞],实际上的取值范围受限于运行 Python 程序的计算机内存大小。
pow(x,y) 函数是 Python 语言的一个内置函数,用来计算 xy 。我们可以用 pow() 函数来测试一下整数类型的取值范围,例如:

print(pow(2,100))

结果为 1267650600228229401496703205376

print(pow(2,500))

结果为3273390607896141870013189696827599152216642046043064789483291368096133796404674554883270092325904157150886684127560071009217256545885393053328527589376

除极大数的运算外,一般认为整数类型没有取值范围限制。

pow() 函数还可以嵌套使用,例如:

print(pow(2,pow(2,15)))

上述程序的结果是一个 9865 位的整数

浮点数类型

简单介绍

浮点数类型与数学中实数的概念一致,表示带有小数的数值。Python 语言要求所有浮点数必须带有小数部分,小数部分可以是 0,这种设计可以区分浮点数和整数类型。
浮点数有两种表示方法:十进制表示和科学计数法表示

下面是浮点数的例子:
0.0,-55.,-2.13,3.1416,96e4,4.3e-3,9.6E5

科学计数法

科学计数法使用字母 e 或 E 作为幂的符号

10 为基数,含义如下:
<系数>e<基数>

4.3e-3 值为 0.0043 ; 9.6E5 也可以表示为 9.6E+5 ,其值为 960 000.0

浮点数类型与整数类型由计算机的不同硬件单元执行,处理方法不同,需要注意的是,尽管浮点数 0.0 与整数 0 值相同,但它们在计算机内部表示不同。

系统的浮点数参数

Python 浮点数的数值范围和小数精度受不同计算机系统的限制,sys.float_info 详细列出了 Python 解释器所运行系统的浮点数各项参数。

import sys
print(sys.float_info)

sys.float_info(max=1.7976931348623157e+308, max_exp=1024, max_10_exp=308,
min=2.2250738585072014e-308, min_exp=-1021, min_10_exp=-307, dig=15, mant_dig=53,
epsilon=2.220446049250313e-16, radix=2, rounds=1)

print(sys.float_info.max)

1.7976931348623157e+308

上述输出给出浮点数类型所能表示的最大值(max)、最小值(min)、科学计数法表示下最大值的幂(max_10_exp)、最小值的幂(min_10_exp)、基数(radix)为 2 时最大值i的幂(max_exp)、最小值的幂(min_exp),科学计数法表示中系数的最大精度(mant_dig),计算机所能分辨的两个相邻浮点数的最小差值(epsilon),能准确计算的浮点数最大个数(dig)。

浮点数类型直接表示或科学计数法表示中的系数最长可输出 16 个数字,浮点数运算结果中最长可输出 17 个数字,然而,根据 sys.float_info 结果,计算机只能够提供 15个数字(dig) 的准确性,最后一位由计算机根据二进制计算结果确定,存在误差,例如:

print(3.1415926535897924)

3.1415926535897922

print(987654321123456.789)

987654321123456.8

浮点数在超过 15 位数字计算中产生的误差与计算机内部采用二级制运算有关,因此使用浮点数无法进行极高精度的数学运算

由于Python 语言能够支持无限制且准确的整数计算,因此,如果希望获得精度更高的计算结果,往往采用整数而不直接采用浮点数。例如,计算如下两个数的乘法值,它们的长度只有 10 个数字,其中:a = 3.141592653, b = 1.234567898

可以直接采用浮点数运算,也可以同时把它们的小数点去掉,当作整数运算,结果如下:

print(3.141592653*1.234567898)

3.8785094379864535

print(3141592653*1234567898)

3878509437986453394

其中,浮点数运算输出 17 个数字长度的结果,然而,只有前 15 个数字是确定正确的。而整数运算能够输出完全准确的运算结果。使用整数表达浮点数的方法是高精度运算的基本方法之一

高精度浮点运算类型

Python 通过标准库 decimal 提供了一个更准确的数字类型 Decimal ,这个类型利用上文所 介绍的整数运算方法提供高精度浮点数运算,并可以使用 getcontext().prec 参数自定义浮点数精度的位数,例如:

import decimal
a=decimal.Decimal('3.141592653')
b=decimal.Decimal('1.234567898')
decimal.getcontext().prec=20
print(a*b)

3.878509437986453394

需要注意的是,在使用 decimal 库时,Decimal(‘数字’)是高精确度数字的基本表示形式,需要使用单引号,例如,decimal.Decimal(‘3.141592653’)。

复数类型

复数类型表示数学中的复数。它可以看作二元有序实数对(a,b),表示为 a + bj ,不同于我们数学中用 a + bi 来表示, 其中,a 是实数部分,简称实部,b 是虚数部分,简称虚部。事实上,复数是实数在二维平面空间旋转的一种表示。

Python 语言中,复数的虚数部分通过后缀 ”J“ 或 “j” 来表示,例如:
12.3+4j -5.6+7j 1.23e-4+5.67e+89j

复数类型中实数部分和虚数部分的数值都是浮点类型。对于复数 z,可以用 z.realz.imag 分别获得它的实数部分和虚数部分,例如:

print((1.23e-4 + 5.67e+89j).real)

0.000123

print((1.23e-4 + 5.67e+89j).imag)

5.67e+89

这次的分享就到这里啦

  • 5
    点赞
  • 6
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

程序喵正在路上

你的鼓励是我创作最大的动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值