2010-10-03 142 views
5

我有一个奇怪的问题在Python:不正确地进行分工:为什么这个分区没有正确执行?

print pointB[1] 
print pointA[1] 
print pointB[0] 
print pointA[0] 
print (pointB[1]-pointA[1])/(pointB[0]-pointA[0]) 

这些结果如下:

100 
50 
100 
40 
0 

感谢

+5

其整数除法从py 2.x中,即'5/6 = 0',试着将denom或分子先投射出去 – Anycorn 2010-10-03 18:28:08

+0

参见http://stackoverflow.com/questions/117250/how-do-i-get-a-decimal-value-when-using-在-python-division-operator-in-python,http://stackoverflow.com/questions/1787249/why-doesnt-this-division-work-in-python,http://stackoverflow.com/questions/2958684/python-部门 – 2010-10-03 18:43:37

回答

17

上述行为是真实的Python 2 。在Python 3中修复了/的行为。在Python 2中,您可以使用:

from __future__ import division 

然后使用/来获得您想要的结果。

>>> 5/2 
2 
>>> from __future__ import division 
>>> 5/2 
2.5 

因为您将两个整数,你得到的结果为整数。

或者,将其中一个数字更改为float

>>> 5.0/2 
2.5 
+7

我不确定它需要什么是'固定的' - 整数除法按照它应该做的那样工作。加上Python 3已经出现了近2年...... – 2010-10-03 18:34:20

+0

我会引用PEP238,'这使得表达式期望浮点或复杂的结果容易出错,当整数不是预期的但可能作为输入。“我也怀疑他会使用Python 3.0,因为我想大家现在明确坚持2.6。但我也在学习,所以我可能错了。 – user225312 2010-10-03 18:36:57

+2

许多语言使用整数除法Python 2方式(如果缺少动态输入,这并不奇怪)。我认为它被认为是一个设计缺陷,或者它不会被改变:)顺便说一句,最新版本是2.7和3.1(在3.2版本已经在alpha)。 – 2010-10-03 18:45:53

3

这是在Python中如何使用整数除法。在计算中使用浮点数或浮点数:

float(pointB[1]-pointA[1])/(pointB[0]-pointA[0]) 
+0

在所有情况下,投射浮动并不能正确工作。 – 2016-04-28 12:45:24

9

它正确完成。

50/60 = 0

也许你正在寻找的50.0/60.0 = 0.83333333333333337,你可以投你的变数浮动吃出:

print float(pointB[1]-pointA[1])/(pointB[0]-pointA[0])