python基础:表示数字的相关类型
一 python中表示数字的相关类型
在python中要表示一个数字,可以直接用阿拉伯数字为一个变量肤质。也可以用一些所支持的类型创建。
在python中常见的数字类型有int、float、complex(复数),Decimal等
二 int类型和float类型
int为整数类型,float为浮点数类型即小数
要表示一个数为整数类型,给直接把一个整数赋值给变量或用内置函数int()来返回一个整数
要表示一个浮点数,可把一个小数赋值给变量或用内置函数float()来返回一个浮点数
在使用float时,经常遇到保留几位小数的问题,此时就要用到round()函数了
round(number, ndigits=None)
返回 number 舍去小数点后 ndigits 位的值。 如果 ndigits 被省略或为 None,则返回最接近输入值的整数
注意上面的32.769和2.675余2位时,一个的末尾似乎是做四舍五入处理了,一位却没做处理,其实不是这样,这是float本身表示数字时存在差异导致的,这会在后面的Decimal部分说到
1 不同数字类型间的混合运算
混合运算时,"较窄"类型的操作数会拓宽到另一个操作数的类型,其中整数比浮点数窄,浮点数比复数窄
如下官网所述,数字类型(复数除外)都支持下列运算
1.1 除法运算 /
如上,除法运算得到的结果类型总是float
1.2 整除运算 //
整数除(//)是对传统除法(/)计算结果进行向下取整,
操作数为两个整数时,它会舍弃结果中的小数部分,结果向负无穷方向舍入,结果为int
操作数中有浮点数时,结果float,小数部分为0,结果向负无穷方向舍入
1.3 求余运算 %
什么是余数,如 7除以2,商为3,余数为1
在数学上更专业的表示方法是 被除数 = 除数 x 商 + 余数 且 0<=余数的绝对值<除数的绝对值,
这样当存在负数时 余数可能就存在多个(注:余数的在数学上的计算规则似乎存在争议,这里是参考一般的规则)
如-7 = 2 x -3 -1
-7 = 2 x -4 +1
如上 1 和-1都是-7与2的余数
在编程语言中,余数问题上,不同的语言采用了不同的计算方法。
在python中,这个结果与整数除(//)密切相关
假设
q = a // b
r = a % b,则有下述关系存在
a = q * b + r
即 r = a - q * b
和数学上的除法一样,除数b不能为0,否则python会报错
1.4 divmod(x,y)
divmod(x,y)的结果即是(x // y, x % y)
1.5 + - * / 等运算符之间的优先级
如下,从最高优先级(最上)到最低优先级(最下)。 相同单元格内的运算符具有相同优先级
三 复数complex
复数也是数学上的概念,由实数和虚数组成
实数,如正数 负数 小数 无理数等
虚数,与实数相反
x²+1=0在实数范围内就没有解,引入虚数后就有解了
假设x²=-1,定义i=√-1,则i²=-1, i为虚数单位
方程的解就是虚数 x=√-1(i)
形如a+bi(a、b均为实数)的数为复数。复数通常用z表示,即z=a+bi
用z.real 和z.imag分别表示复数的实数和虚数部分
四 Decimal
float类型无法准确的表示一个数字
python中的数字运算,当存在float类型时,结果可能会与数学上的运算结果不一致,如下
这是因为float类型的数字实际是一串二进制数字,比如把0.1转换成二进制数,结果是无限的
0.0001100110011001100110011001100110011001100110011001...............
但是python中float的长度确实有限的,所以只能对无线的二进制数据去除一部分
如0.000110011001100110011001这样一个有限的二进制数据,这个数据只能说接近0.1但并不是数学逻辑上的数字0.1
所以,在用float数据计算时,它用的很可能是一个近似值而不是真实值在计算,结果自然会出现误差
这时候,就该Decimal发挥作用了,如果想要像中小学数学那样准确运算,就要用到Decimal这个类型
Decimal类型
如上,Decimal类型来自内置库decimal,注意,要把数字作为字符串的形式构成成Decimal类型才能准确计算,因为float本身就是一个近似值,把float转成Decimal依然是一个近似值而不是要表示的真实的值
构造一个Decimal对象如下官网表述
前面讲过的数字间的运算如 + - * / // %等也可用于Decimal类型,但一些运算和int float间的运算有点区别,如下
取余运算 %
在Decimal中取余,结果的符号是 被除数 的符号,而不是除数的符号
整除运算 //
在Decimal中整除,返回真商的整数部分(截断为零)而不是它的向下取整
上下文对象
上下文是算术运算所在的环境。 它们管理精度、设置舍入规则、确定将哪些信号视为异常,并限制指数的范围
可使用 getcontext() 和 setcontext() 函数来读取或修改
decimal.getcontext():返回活动线程的当前上下文
Decimal表示一个数字也是有长度的,我们可以获取 修改它的长度
如上,因为Decimal的长度是可以自定义的,所以,用decimal来计算0.2+0.1比浮点数的结果更加接近准确结果
Decimal与其他数字类型的转换
如上最好转换成str并注意控制精度。转成float,Decimal长度过长的话,Decimal会被截断
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南