Python2 / 3给出了相同数学运算的不同答案......为什么? (计算差异百分比)

时间:2017-11-15 11:08:56

标签: python python-3.x python-2.7 math

Python 2和Python 3似乎为找到两个数量之间的百分比差异的非常简单的数学运算得出了不同的答案。

例如:

# Python 2.7.10
>>> def percent_difference(qty1, qty2):
...     diff = max(qty1, qty2) - min(qty1, qty2)
...     print(diff)
...     percent = diff / ( (qty1 + qty2) / 2)
...     print(percent)
... 
>>> percent_difference(1, 2)
1
1

# Python 3.6.2

>>> def percent_difference(qty1, qty2):
...     diff = max(qty1, qty2) - min(qty1, qty2)
...     print(diff)
...     percent = diff / ( (qty1 + qty2) / 2)
...     print(percent)
... 
>>> percent_difference(1, 2)
1
0.6666666666666666

这里发生了什么?

(Python3是正确的)

3 个答案:

答案 0 :(得分:1)

Python 3改变了/运算符的行为。它曾经依赖于使用的类型(即integer / integer是整数除法,如果其中一个操作数是浮点数,则得到浮点除法。)

Python Enhancement Proposal PEP-0238中解释了更改的基本原理:

  

正确的解决方法是微妙的:如果float()的参数可能是复数,则将参数转换为float()是错误的;如果参数的符号为零,则向参数添加0.0不会保留参数的符号。没有任何缺点的唯一解决方案是将参数(通常是第一个)乘以1.0。这使float和complex的值和符号保持不变,并将int和long转换为具有相应值的float。

答案 1 :(得分:0)

你需要告诉Python你想要浮点输出。 试试angularCli: { environment: 'dev', codeCoverage: true }

答案 2 :(得分:0)

InvocationPython2以不同的方式处理整数的div运算。

Python3中,div操作将处理整数并浮动相同:

python3

2/3 = 1.5 2.0/3 = 1.5 2/3.0 = 1.5 2.0/3.0 = 1.5 中,如果两个操作数都是整数,它将截断浮点后的数字:

python2