为什么整数除法会产生浮点数而不是另一个整数?
- 2024-11-28 08:37:00
- admin 原创
- 5
问题描述:
考虑一下 Python 3 中的这种划分:
>>> 2/2
1.0
这是故意的吗?我强烈记得早期版本返回了int/int = int
。我该怎么办?是否有新的除法运算符,还是我必须始终进行转换?
在 2.x 中,行为确实被逆转了;请参阅如何强制将除法设为浮点数?除法一直向下舍入为 0?以了解相反的、特定于 2.x 的问题。
解决方案 1:
查看PEP-238:更改除法运算符
// 运算符可用于明确地请求地板除法。
解决方案 2:
哎呀,马上就发现了2//2
。这将输出一个 int 而不是 float。
解决方案 3:
Python 2.7 和 Python 3 中除法运算符的行为
在 Python 2.7 中:默认情况下,除法运算符将返回整数输出。
要获得双精度结果,请将被除数或除数乘以 1.0。
100/35 => 2 # Expected is 2.857142857142857
(100*1.0)/35 => 2.857142857142857
100/(35*1.0) => 2.857142857142857
在 Python 3 中
// => used for integer output
/ => used for double output
100/35 => 2.857142857142857
100//35 => 2
100.//35 => 2.0 # Floating-point result if the divisor or dividend is real
解决方案 4:
接受的答案已经提到了PEP 238。我只是想为那些对正在发生的事情感兴趣而又不阅读整个 PEP 的人快速介绍一下幕后情况。
Python 将诸如+
、-
和*
之类的运算符/
映射到特殊函数,例如,例如a + b
相当于
a.__add__(b)
关于 Python 2 中的除法,默认情况下只有/
映射到,__div__
并且结果取决于输入类型(例如int
)float
。
Python 2.2 引入了该__future__
特性division
,它以以下方式改变了除法语义(PEP 238 的 TL;DR):
/
映射__truediv__
必须“返回除法数学结果的合理近似值”(引自 PEP 238)//
映射到__floordiv__
,它应该返回/
__div__
从 Python 3.0 开始,PEP 238 的变化成为默认行为, Python 的对象模型中不再有特殊方法。
如果你想在 Python 2 和 Python 3 中使用相同的代码,请使用
from __future__ import division
并遵守 PEP 238 的/
和语义//
。
相关推荐
热门文章
项目管理软件有哪些?
- 2024年20款好用的项目管理软件推荐,项目管理提效的20个工具和技巧
- 2024年开源项目管理软件有哪些?推荐5款好用的项目管理工具
- 项目管理软件有哪些?推荐7款超好用的项目管理工具
- 项目管理软件哪个最好用?盘点推荐5款好用的项目管理工具
- 项目管理软件有哪些最好用?推荐6款好用的项目管理工具
- 项目管理软件有哪些,盘点推荐国内外超好用的7款项目管理工具
- 2024年常用的项目管理软件有哪些?推荐这10款国内外好用的项目管理工具
- 2024项目管理软件排行榜(10类常用的项目管理工具全推荐)
- 项目管理软件排行榜:2024年项目经理必备5款开源项目管理软件汇总
- 项目管理必备:盘点2024年13款好用的项目管理软件
热门标签
云禅道AD