
数字是任何编程语言的重要组成部分,Python也不例外。但是我们真正理解数字吗?比如在Python计算0.1+0.2 等多少?

或者看下面的结果

为什么会是上面的结果?浮点数在计算机中是以二进制形式存储的,但并非所有的十进制小数都能精确地转换为二进制小数。这种情况类似于十进制系统无法精确表示1/3(只能近似为0.333...),二进制系统也无法精确表示某些十进制小数,如0.1或0.2。
接下来,我们逐步展开在python 的数字的相关内容,包括整形和浮点型的区别、如何四舍五入到指定小数位数以及如何格式化数字显示。
整数
Python有三种内置的数值数据类型:整数、浮点数和复数。我们下来看看整数:整数是一个没有小数位的整数。例如,1是一个整数,但1.0不是。整数数据类型的名称是int,你可以通过type()函数看到它:

你可以通过键入所需的数字来创建一个整数。例如,以下代码将整数25赋值给变量num:

也可以使用int()
函数将包含整数的字符串转换为数字,这在处理用户输入时特别有用。例如,以下代码将字符串"25"转换为整数25:

千分问表示:手写大数字时,你通常会将数字分成每三位一组,并用逗号或小数点分隔。数字1,000,000比1000000更容易阅读。
在Python中,你不能在整数字面量中使用逗号来分组数字,但你可以使用下划线(_)。以下两种方式都是有效的,用于以整数字面量的形式表示一百万:


python中整数可以有多大是没有限制的,无论多大Python可以毫无问题地处理它!

浮点数
浮点数(简称float)是一个有小数位的数字。1.0是一个浮点数,-2.75也是。浮点数据类型的名称是float:

与整数一样,浮点数可以通过浮点数字字符串创建,或者通过将字符串转换为浮点数来创建,使用float()
函数:

表示浮点数字的方式有三种。以下每种方式都创建了一个值为一百万的浮点数字面量:

E表示法是指数表示法的简称。你可能在计算器上看到过这种表示法,用于表示太大而无法在屏幕上显示的数字。
要使用E表示法编写浮点数字面量,请键入一个数字,后跟字母e,然后再键入另一个数字。Python将e左边的数字乘以10的e右边数字的次幂。因此,1e6等价于1×10⁶。
Python还使用E表示法来显示大的浮点数:

浮点数200000000000000000.0会显示为2e+17。+号表示指数17是一个正数。你也可以使用负数作为指数:

与整数不同,浮点数确实有一个最大大小。最大浮点数取决于你的系统,但类似于2e400的数字应该远远超出了大多数机器的能力。2e400是2×10⁴⁰⁰,这远远超过了宇宙中原子的总数!

算术运算符和表达式
接下来我们介绍一下在Python中使用数字进行基本的算术运算,如加法、减法、乘法和除法。同时,您还将学习在代码中编写数学表达式的一些约定。
加法
加法使用+运算符进行:

在+运算符两侧的两个数被称为操作数。在上面的例子中,两个操作数都是整数,但操作数不必是同一类型。将一个整数与一个浮点数相加:

减法
要减去两个数,只需在它们之间放置一个-运算符:

-运算符也用于表示负数:

一个数中减去一个负数,但正如你下面看到的那样,这有时会看起来很令人困惑:

在编写代码时,清晰地表达你的意图很重要,尤其是当涉及到负数和减法时。你可以使用括号来明确你的计算顺序,虽然对于简单的表达式来说,Python的运算符优先级(先乘除后加减,从左到右)通常足够清晰。但对于更复杂的表达式,使用括号可以使代码更易于理解。

乘法
要乘以两个数,使用*运算符:

乘法中得到的数字类型遵循与加法和减法相同的规则。两个整数相乘的结果是一个整数,而一个数与一个浮点数相乘的结果是一个浮点数。
除法
/运算符用于除以两个数:

整除
如果认为写int(5.0 / 2)
有点冗长,Python提供了第二个除法运算符,称为整数除法运算符(//),也称为向下取整除法运算符:

指数
可以使用 ** 运算符将一个数提升为幂次:

模运算符
% 运算符,或称为模,返回左操作数除以右操作数的余数:

使用 %
运算符处理负数时,事情会变得有点棘手:

虽然乍一看可能令人疑惑,但这些结果是Python中明确定义行为的产物。为了计算一个数x除以另一个数y的余数r,Python使用等式r = x - (y * (x // y))。
例如,为了找到5 % -3,Python首先找到(5 // -3)。由于5 / -3大约是-1.67,这意味着5 // -3是-2。现在Python将这个结果乘以-3得到6。最后,Python从5中减去6得到-1。
算术表达式
可以将运算符组合起来形成复杂的表达式。表达式是Python可以计算或评估以返回值的数字、运算符和括号的组合。
以下是一些算术表达式的示例:

表达式的规则与日常算术中的规则相同。在表达式中,、/、// 和 % 运算符具有相同的优先级,而这些运算符的优先级都高于 + 和 - 运算符。
数学函数和数字方法
Python 有一些内置函数,你可以使用它们来处理数字。接下来介绍三个最常见的函数:
使用 round() 四舍五入数字
可以使用 round() 将一个数字四舍五入到最接近的整数:

当数字以 .5 结尾时,round() 的行为可能会有些出乎意料:在 Python 3 中,round() 函数采用的是“银行家舍入”规则(也称为四舍六入五成双规则),这意呀着当需要舍入的数字是 .5 时,它会查看该数字前面的一位。如果这一位是偶数,则 .5 向下舍入(即向更靠近的偶数舍入);如果这一位是奇数,则 .5 向上舍入。这种舍入方法有助于减少由于连续舍入操作导致的统计偏差。
例如:
然而,需要注意的是,这种规则只适用于正好为 .5 的情况。对于其他小数,round() 会简单地四舍五入到最接近的整数。
round() 函数还可以接受第二个参数,用于指定需要保留的小数位数。如果省略此参数,则默认为 0,即四舍五入到最接近的整数。
例如:

使用 abs() 计算绝对值
一个数 n 的绝对值,如果 n 是正数,则就是 n;如果 n 是负数,则是 -n。例如,3 的绝对值是 3,而 -5 的绝对值是 5。在 Python 中,要获取一个数的绝对值,你可以使用 abs() 函数:

使用 pow() 求幂
使用 ** 运算符将一个数进行幂次。也可以使用 pow() 函数来达到相同的结果。
pow() 函数接受两个参数。第一个参数是底数(base),即要提升到某个幂次的数;第二个参数是指数(exponent),即底数要提升到的幂次。
例如:

pow()
函数接受一个可选的第三个参数,该参数用于计算第一个数提升到第二个数的幂次后,再对第三个数取模。换句话说,pow(x, y, z)
等同于 (x ** y) % z
。

检查浮点数是否为整数
浮点数有一个 .is_integer() 方法,如果数字是整数(即没有小数部分),则返回 True;否则返回 False:

以特定格式打印数字
向用户显示数字需要将数字插入到字符串中。你可以使用 f-strings 来实现这一点,方法是将分配给数字的变量用花括号包围起来:

关于格式化数字,详细可以参考:https://docs.python.org/3/library/string.html#format-specification-mini-language
接下来介绍几个常用的,保留两位小数的格式:

可以使用 , 选项在数字的整数部分插入逗号,以千位为单位对较大的数字进行分组:

另一个有用的选项是 %,它用于显示百分比。% 选项将数字乘以 100,并以定点格式显示,后面跟着一个百分号。
% 选项应该始终放在你的格式化规范的末尾,你不能将它与 f 选项混合使用。例如,.1% 将数字显示为具有一位小数的百分比:

复数
Python 是少数几个为复数提供内置支持的编程语言之一。虽然复数在科学计算和计算机图形学等领域之外并不常见,但 Python 对它们的支持是其强项之一。
在 Python 中创建一个复数,你只需写出实部,然后是一个加号,接着是带有字母 j 的虚部:

虚数带有两个属性,.real 和 .imag,它们分别返回该数的实部和虚部:

复数还有一个 .conjugate() 方法,它返回该数的复共轭:

复数的四则运算:

Python中的数字包括整数、浮点数和复数。整数类型int
没有大小限制,可用下划线分组显示。浮点数float
以二进制存储,有最大值限制,支持E表示法。常见运算符包括加减乘除、整除、指数和模运算。Python提供round()
、abs()
和pow()
等函数处理数字,支持使用f-strings格式化输出。复数在Python中有内置支持,支持四则运算和属性访问。理解这些基础有助于更好地掌握Python的数值处理能力。