代码之家  ›  专栏  ›  技术社区  ›  Jonas Byström

python整数除法产生浮点

  •  175
  • Jonas Byström  · 技术社区  · 15 年前
    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 ?我应该怎么做,有没有新的部门经理,或者我必须一直扮演?

    4 回复  |  直到 7 年前
        1
  •  233
  •   Brandon E Taylor    15 年前

    看一看 PEP-238 :更改除法运算符

    //操作员可以明确要求楼层划分。

        2
  •  51
  •   Jonas Byström    15 年前

    哎呀,马上就找到了 2//2 .

        3
  •  30
  •   Jonas Byström    7 年前

    希望能马上帮上忙。

    python 2.7和python 3中除法运算符的行为

    在python 2.7中:默认情况下,除法运算符将返回整数输出。

    把结果加倍 多重1 “股息或除数”

    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
    
        4
  •  19
  •   code_onkel    7 年前

    公认的答案已经提到 PEP 238 . 我只想在不阅读整个政治公众人物的情况下,为那些对正在发生的事情感兴趣的人添加一个快速的幕后观察。

    python将运算符映射为 + ,请 - , * / 特殊功能,例如 a + b 等于

    a.__add__(b)
    

    关于python 2中的除法,默认情况下只有 / 哪些地图到 __div__ 结果取决于输入类型(例如 int ,请 float )

    python 2.2引入了 __future__ 特征 division ,这改变了划分语义的方式如下(tl;dr of pep 238):

    • / 地图到 __truediv__ 它必须“返回一个合理的近似值 除法的数学结果(引自PEP 238)
    • // 地图到 __floordiv__ ,返回 /

    在python 3.0中,pep 238的更改成为了默认行为,并且没有其他特殊的方法 _分区__ 在Python的对象模型中。

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

    from __future__ import division
    

    坚持PEP 238的语义学 / / / .