Python 中除法使用 `/` 与 `//`

2024-11-25 08:50:00
admin
原创
213
摘要:问题描述:使用其中一个比另一个有什么好处吗?在 Python 2 中,它们似乎都返回相同的结果:>>> 6/3 2 >>> 6//3 2 解决方案 1:在 Python 3.x 中,5 / 2将返回2.5,5 // 2并将返回2。前者是浮点除法,后者是向下取整除法,有时也称...

问题描述:

使用其中一个比另一个有什么好处吗?在 Python 2 中,它们似乎都返回相同的结果:

>>> 6/3
2
>>> 6//3
2

解决方案 1:

在 Python 3.x 中,5 / 2将返回2.55 // 2并将返回2。前者是浮点除法,后者是向下取整除法,有时也称为整数除法

在 Python 2.2 或更高版本的 2.x 行中,整数没有区别,除非执行from __future__ import division,这会导致 Python 2.x 采用 3.x 行为。

无论将来如何导入,5.0 // 2都会返回,2.0因为这是操作的底部除法结果。

您可以在PEP 238:更改除法运算符中找到详细描述。

解决方案 2:

Python 2.x 说明:

需要澄清的是,对于 Python 2.x 行,/它既不是向下取整除法,也不是真正的除法。

/当两个参数都是时,就是向下取整除法int,但当其中一个参数是 时,就是真除法float

解决方案 3:

//执行“向下取整除法”,无论类型如何。因此
1.0/2.0将给出0.5,但1/21//21.0//2.0将给出0

有关详细信息,请参阅PEP 238:更改除法运算符

解决方案 4:

/ → 浮点除法

// → 地板除法

让我们看 Python 2.7 和 Python 3.5 中的一些示例。

Python 2.7.10 与 Python 3.5

print (2/3)  ----> 0                   Python 2.7
print (2/3)  ----> 0.6666666666666666  Python 3.5

Python 2.7.10 与 Python 3.5

print (4/2)  ----> 2         Python 2.7
print (4/2)  ----> 2.0       Python 3.5

现在如果您想要(在 Python 2.7 中)获得与 Python 3.5 相同的输出,您可以执行以下操作:

Python 2.7.10

from __future__ import division
print (2/3)  ----> 0.6666666666666666   # Python 2.7
print (4/2)  ----> 2.0                  # Python 2.7

而在 Python 2.7 和 Python 3.5 中,向下取整除没有任何区别。

138.93//3 ---> 46.0        # Python 2.7
138.93//3 ---> 46.0        # Python 3.5
4//3      ---> 1           # Python 2.7
4//3      ---> 1           # Python 3.5

解决方案 5:

正如大家已经回答的那样,//是楼层划分。

这之所以很重要,是因为//从 Python 2.2 开始的所有版本(包括 Python 3.x 版本)中,这都是明确的向下除法。

的行为/可能会根据以下因素而改变:

  • 是否主动__future__导入(模块本地)

  • Python 命令行选项,-Q old或者-Q new

解决方案 6:

>>> print 5.0 / 2
2.5

>>> print 5.0 // 2
2.0

解决方案 7:

Python 2.7 和其他即将推出的 Python 版本:

  • 分配 (/

将左侧操作数除以右侧操作数

例子:4 / 2 = 2

  • 楼层除法 ( //)

操作数的除法,其结果是删除小数点后数字的商。但如果其中一个操作数为负数,则结果将向下取整,即从零开始舍入(朝向负无穷大):

例如:9//2 = 49.0//2.0 = 4.0-11//3 = -4-11.0//3 = -4.0

除法/运算符和//整数除法运算符的运算方式类似。

解决方案 8:

//是向下取整除法。它总是返回结果的整数向下取整。另一种是“常规”除法。

解决方案 9:

双斜线 ,//是向下除法:

>>> 7//3
2

解决方案 10:

前面的答案都很好。我想补充一点。在某些值之前,它们两个都得出相同的商。之后,向下取整除法运算符 ( //) 可以正常工作,但除法运算符 ( /) 则不行:

>>> int(755349677599789174 / 2) # Wrong answer
377674838799894592
>>> 755349677599789174 // 2     # Correct answer
377674838799894587

解决方案 11:

该等式的答案四舍五入为下一个较小的整数或浮点数,以 .0 作为小数点。

>>>print 5//2
2
>>> print 5.0//2
2.0
>>>print 5//2.0
2.0
>>>print 5.0//2.0
2.0

解决方案 12:

Python 3.x 说明

只是为了补充一些先前的答案。

需要指出的是:

一个 // b

  • 地板除法。例如:

数学.floor(a/b)

  • 不是int division。例如:

整数(a/b)

  • 浮点除法不会四舍五入为 0。例如:

圆形(a/b,0)

因此,当涉及正数和负数时,行为方式会有所不同,如下例所示:

1 // 2 为 0,如下所示:

数学.floor(1/2)

-1 // 2 是 -1,例如:

数学.floor(-1/2)

解决方案 13:

Python 3

手术结果笔记
x / yxy的商
x // yxy的底商(1)

笔记:

  1. 也称为整数除法。结果值是一个整数,但结果的类型不一定是 int。结果总是向负无穷方向舍入:1//20(-1)//2-11//(-2)-1(-1)//(-2)0

Python 2

手术结果笔记
x / yxy的商(1)
x // y(取整)xy的商(4)(5)

笔记:

  1. 对于(普通或长)整数除法,结果为整数。结果始终向负无穷方向舍入:1/2 为 0,(-1)/2 为 -1,1/(-2) 为 -1,(-1)/(-2) 为 0。请注意,如果任一操作数为长整数,则结果为长整数,无论​​数值如何。

4.自 2.3 版起已弃用:对于复数,不再定义向下取整除运算符、取模运算符和divmod()函数。相反,如果合适,请使用函数将其转换为浮点数abs()
  1. 也称为整数除法。结果值是一个整数,但结果类型不一定是 int。

解决方案 14:

概括

  • x//y :精确整数除法

  • int(x/y) OR math.floor(x/y):不精确的整数除法(但几乎正确)

  • x/y:浮点除法(失去意义)

卓越的计算结果

import math
N = 1004291331219602346 # huge number 

print(N//100) #=> 10042913312196023 is correct answer
print(math.floor(N/100)) #=> 10042913312196024 is wrong answer
print(math.ceil(N/100)) #=> 10042913312196024 is wrong answer
print(int(N/100)) #=> 10042913312196024 is wrong answer

考虑

我思考了一下 的求值int(x/y)

首先,Python 求值表达式x/y并得到不精确的浮点数 z。

其次,Python 求值表达式int(z)

当重要性损失不可忽略时,我们会得到错误的结果。

解决方案 15:

  • //是向下取整除法。它始终会给出结果的向下取整值。

  • 另一个/是浮点除法。

以下是/和之间的区别//;我已经在 Python 3.7.2 中运行了这些算术运算。

>>> print (11 / 3)
3.6666666666666665

>>> print (11 // 3)
3

>>> print (11.3 / 3)
3.7666666666666667

>>> print (11.3 // 3)
3.0

解决方案 16:

5.0//2结果是2.0,而不是2,因为运算符的返回值的返回类型//遵循 Python 强制(类型转换)规则。

Python 提倡将较低数据类型(整数)转换为较高数据类型(浮点数),以避免数据丢失。

相关推荐
  政府信创国产化的10大政策解读一、信创国产化的背景与意义信创国产化,即信息技术应用创新国产化,是当前中国信息技术领域的一个重要发展方向。其核心在于通过自主研发和创新,实现信息技术应用的自主可控,减少对外部技术的依赖,并规避潜在的技术制裁和风险。随着全球信息技术竞争的加剧,以及某些国家对中国在科技领域的打压,信创国产化显...
工程项目管理   1565  
  为什么项目管理通常仍然耗时且低效?您是否还在反复更新电子表格、淹没在便利贴中并参加每周更新会议?这确实是耗费时间和精力。借助软件工具的帮助,您可以一目了然地全面了解您的项目。如今,国内外有足够多优秀的项目管理软件可以帮助您掌控每个项目。什么是项目管理软件?项目管理软件是广泛行业用于项目规划、资源分配和调度的软件。它使项...
项目管理软件   1354  
  信创国产芯片作为信息技术创新的核心领域,对于推动国家自主可控生态建设具有至关重要的意义。在全球科技竞争日益激烈的背景下,实现信息技术的自主可控,摆脱对国外技术的依赖,已成为保障国家信息安全和产业可持续发展的关键。国产芯片作为信创产业的基石,其发展水平直接影响着整个信创生态的构建与完善。通过不断提升国产芯片的技术实力、产...
国产信创系统   21  
  信创生态建设旨在实现信息技术领域的自主创新和安全可控,涵盖了从硬件到软件的全产业链。随着数字化转型的加速,信创生态建设的重要性日益凸显,它不仅关乎国家的信息安全,更是推动产业升级和经济高质量发展的关键力量。然而,在推进信创生态建设的过程中,面临着诸多复杂且严峻的挑战,需要深入剖析并寻找切实可行的解决方案。技术创新难题技...
信创操作系统   27  
  信创产业作为国家信息技术创新发展的重要领域,对于保障国家信息安全、推动产业升级具有关键意义。而国产芯片作为信创产业的核心基石,其研发进展备受关注。在信创国产芯片的研发征程中,面临着诸多复杂且艰巨的难点,这些难点犹如一道道关卡,阻碍着国产芯片的快速发展。然而,科研人员和相关企业并未退缩,积极探索并提出了一系列切实可行的解...
国产化替代产品目录   28  
热门文章
项目管理软件有哪些?
云禅道AD
禅道项目管理软件

云端的项目管理软件

尊享禅道项目软件收费版功能

无需维护,随时随地协同办公

内置subversion和git源码管理

每天备份,随时转为私有部署

免费试用