python基础:表示数字的相关类型

一 python中表示数字的相关类型

在python中要表示一个数字,可以直接用阿拉伯数字为一个变量肤质。也可以用一些所支持的类型创建。
在python中常见的数字类型有int、float、complex(复数),Decimal等

二 int类型和float类型

int为整数类型,float为浮点数类型即小数

要表示一个数为整数类型,给直接把一个整数赋值给变量或用内置函数int()来返回一个整数
image

要表示一个浮点数,可把一个小数赋值给变量或用内置函数float()来返回一个浮点数
image

在使用float时,经常遇到保留几位小数的问题,此时就要用到round()函数了
round(number, ndigits=None)
返回 number 舍去小数点后 ndigits 位的值。 如果 ndigits 被省略或为 None,则返回最接近输入值的整数

image

注意上面的32.769和2.675余2位时,一个的末尾似乎是做四舍五入处理了,一位却没做处理,其实不是这样,这是float本身表示数字时存在差异导致的,这会在后面的Decimal部分说到

1 不同数字类型间的混合运算

混合运算时,"较窄"类型的操作数会拓宽到另一个操作数的类型,其中整数比浮点数窄,浮点数比复数窄

如下官网所述,数字类型(复数除外)都支持下列运算
image

1.1 除法运算 /

image
如上,除法运算得到的结果类型总是float

1.2 整除运算 //

整数除(//)是对传统除法(/)计算结果进行向下取整,
操作数为两个整数时,它会舍弃结果中的小数部分,结果向负无穷方向舍入,结果为int

操作数中有浮点数时,结果float,小数部分为0,结果向负无穷方向舍入
image

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会报错

image

image

1.4 divmod(x,y)

divmod(x,y)的结果即是(x // y, x % y)

image

1.5 + - * / 等运算符之间的优先级

如下,从最高优先级(最上)到最低优先级(最下)。 相同单元格内的运算符具有相同优先级
image

三 复数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分别表示复数的实数和虚数部分
image

四 Decimal

float类型无法准确的表示一个数字

python中的数字运算,当存在float类型时,结果可能会与数学上的运算结果不一致,如下
image

这是因为float类型的数字实际是一串二进制数字,比如把0.1转换成二进制数,结果是无限的
0.0001100110011001100110011001100110011001100110011001...............
但是python中float的长度确实有限的,所以只能对无线的二进制数据去除一部分
如0.000110011001100110011001这样一个有限的二进制数据,这个数据只能说接近0.1但并不是数学逻辑上的数字0.1

所以,在用float数据计算时,它用的很可能是一个近似值而不是真实值在计算,结果自然会出现误差

这时候,就该Decimal发挥作用了,如果想要像中小学数学那样准确运算,就要用到Decimal这个类型

Decimal类型

image
image

如上,Decimal类型来自内置库decimal,注意,要把数字作为字符串的形式构成成Decimal类型才能准确计算,因为float本身就是一个近似值,把float转成Decimal依然是一个近似值而不是要表示的真实的值

构造一个Decimal对象如下官网表述
image

前面讲过的数字间的运算如 + - * / // %等也可用于Decimal类型,但一些运算和int float间的运算有点区别,如下

取余运算 %
在Decimal中取余,结果的符号是 被除数 的符号,而不是除数的符号
image

整除运算 //
在Decimal中整除,返回真商的整数部分(截断为零)而不是它的向下取整
image

上下文对象

上下文是算术运算所在的环境。 它们管理精度、设置舍入规则、确定将哪些信号视为异常,并限制指数的范围
可使用 getcontext() 和 setcontext() 函数来读取或修改

decimal.getcontext():返回活动线程的当前上下文
image

Decimal表示一个数字也是有长度的,我们可以获取 修改它的长度
image

如上,因为Decimal的长度是可以自定义的,所以,用decimal来计算0.2+0.1比浮点数的结果更加接近准确结果

Decimal与其他数字类型的转换

image

如上最好转换成str并注意控制精度。转成float,Decimal长度过长的话,Decimal会被截断

posted @   工作手记  阅读(158)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
点击右上角即可分享
微信分享提示