为什么Python中的整除是向下取整?
一、为什么Python中的整除是向下取整
这个问题让一些人感到困扰,但其实是有数学考虑的。整除操作(//)与取模操作(%)是一个组合,共同实现一个数学关系(所有变量都是整数):
# a/b = q 余 r# b*q + r = a,其中 0 <= r < b。
当 a 为负数(b 保持正数),我们有两个选择:一个是让 q 向零取整,于是余数 r 会变成负数,即 0 <= abs(r) < b;另一个是让 q 向负无穷取整,则余数的设定保持不变。
数学家们总是倾向于后一种选择。
而在 Python 中,我也选择了后一种方案,因为在实际应用中,存在一些 a 既可能为正数也可能为负数的情况。
以 POSIX 时间戳(1970年以来的秒数)为例,如果我们要获取当前的具体时间,由于每天为 24 * 3600 = 86400 秒,只需直接取模 t % 86400 就可以了。假如时间戳为负数,即在 1970 年之前,那么,为获得正确结果,就只能用向下取整,而不是向零取整。
我能想到的另一个例子是图像点位的计算。而且我很确定,还有许多其它例子。
顺便提一下,如果 b 取负数,整个等式就反过来了:0 >= r > b。
延伸阅读:
二、Python中取整的几种方法小结
1、向下取整
向下取整直接用内建的 int() 函数即可:
>>> a = 3.75
>>> int(a)
2、四舍五入
对数字进行四舍五入用 round() 函数:
>>> round(3.25); round(4.85)
3.0
5.0
3、向上取整
向上取整需要用到 math 模块中的 ceil() 方法:
>>> import math
>>> math.ceil(3.25)
4.0
>>> math.ceil(3.75)
4.0
>>> math.ceil(4.85)
5.0
4、分别取整数部分和小数部分
有时候我们可能需要分别获取整数部分和小数部分,这时可以用 math 模块中的 modf() 方法,该方法返回一个包含小数部分和整数部分的元组:
>>> import math
>>> math.modf(3.25)
(0.25, 3.0)
>>> math.modf(3.75)
(0.75, 3.0)
>>> math.modf(4.2)
(0.20000000000000018, 4.0)
有人可能会对最后一个输出结果感到诧异,按理说它应该返回 (0.2, 4.0) 才对。这里涉及到了另一个问题,即浮点数在计算机中的表示,在计算机中是无法精确的表示小数的,至少目前的计算机做不到这一点。上例中最后的输出结果只是 0.2 在计算中的近似表示。Python 和 C 一样, 采用 IEEE 754 规范来存储浮点数。

相关推荐HOT
更多>>
项目的时间管理包括什么?
一、项目时间管理的内容1、定义活动此步骤要求您定义完成项目所需的任务,里程碑和其他活动。从每个任务开始的就定义清楚活动,并在项目填写详...详情>>
2023-10-10 21:58:05
NTFS文件系统的B+树结构与一般的B+树结构有什么区别?
一、NTFS文件系统的B+树结构与一般的B+树结构的区别NTFS文件系统的B+树结构与一般的B+树结构的区别是NTFS文件系统的B+树结构是配合磁盘特性的,...详情>>
2023-10-10 19:20:39
抖音小店怎么查看评价内容记录
在抖音小店经营中,查看评价内容记录是非常重要的一件事。这不仅有助于了解顾客对商品和服务的反馈,也能够提升店铺的信誉度和客户满意度。但是...详情>>
2023-10-10 09:55:22
开抖音小店无货源怎么上传视频教程
近年来,随着互联网的普及和社交媒体的发展,开抖音小店成为了一种全新的创业方式。虽然没有实体店面、对货架的依赖,但是如何上传视频卖货成为...详情>>
2023-10-10 09:28:24