Python整数除法产生浮点数

时间:2009-08-15 21:48:40

标签: python integer python-3.x division

Python 3.1 (r31:73574, Jun 26 2009, 20:21:35) [MSC v.1500 32 bit (Intel)] on win32
Type "help", "copyright", "credits" or "license" for more information.
>>> 2/2
1.0

这是打算吗?我强烈记得返回int/int=int的早期版本?我该怎么办,是否有新的分区运算符或者我必须总是进行演员?

5 个答案:

答案 0 :(得分:243)

查看PEP-238:更改分部操作员

  

//运营商可以明确地请求楼层划分。

答案 1 :(得分:51)

糟糕,立即找到2//2

答案 2 :(得分:33)

希望它可以立即帮助某人。

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 divsor or dividend real

答案 3 :(得分:19)

已接受的答案已提及PEP 238。我只是想在没有阅读整个PEP的情况下为那些对正在发生的事情感兴趣的人添加一个快速的视角。

Python将+-*/等运算符映射到特殊函数,例如a + b相当于

a.__add__(b)

关于Python 2中的除法,默认情况下只有/映射到__div__,结果取决于输入类型(例如intfloat

Python 2.2引入了__future__特性division,它以下列方式改变了除法语义(TL; PEP 238的DR):

  • /映射到__truediv__,必须“返回合理的近似值 分裂的数学结果“(引自PEP 238)
  • //映射到__floordiv__,它应返回/
  • 的内部结果

使用Python 3.0,PEP 238的更改成为默认行为,Python的对象模型中没有更多特殊方法__div__

如果要在Python 2和Python 3中使用相同的代码,请使用

from __future__ import division

并坚持使用///的PEP 238语义。

答案 4 :(得分:0)

根据Python3文档,python除以整数后,即使预期为整数也会产生浮点数。

要专门打印整数,请使用floor division method。 楼层除法将四舍五入并除去小数点。 Represented by //

因此,使用2//2而不是2/2

您也可以从__future__导入除法,无论使用python2还是python3。

希望有帮助!