我在python中计算了以下2个值并得到了不同的结果!如果有人能够解释为什么会这样发生,那就太好了。
(111 - (111 + 2*17)*3375)/(-14)
给出34947作为输出。
(111 - (111 + 2*17)*3375)/(14)*-1
给出34948作为输出。
这两个术语在数学上是等价的。
答案 0 :(得分:5)
这与舍入规则有关。考虑一个更简单的例子:
>>> -3/(-2)
1
>>> -3/2*-1
2
1.5
将向下舍入为1
,-1.5
向向下舍入为-2
。在某种程度上是一致的。
普通或长整数除法产生相同类型的整数;该 结果是具有'floor'功能的数学除法 适用于结果。
如果你想在Python 2.x中得到一个浮点结果,你需要一个显式转换(或者只是使用浮点文字),或者做from __future__ import division
。在Python 3.x中,除法总是产生一个浮点数(ref)。
答案 1 :(得分:1)
您正在进行整数数学运算,根据分数结果是负数还是正数,对结果进行不同的舍入。使用浮点除法:
>>> (111 - (111 + 2*17)*3375)/(14.)*(-1)
34947.42857142857
>>> (111 - (111 + 2*17)*3375)/(-14.)
34947.42857142857
答案 2 :(得分:1)
归结为python处理整数除法的方式。
如果你的除法的分子(顶部)或除数(底部)是负数,那么python将从零开始舍入。一个简单的说服自己的方法是比较两个更简单的分数:25/6
和25/(-6)
。这些将分别产生4和-5。
为了获得相同的结果,你可以使用浮点数,即14.0转换到浮点算术。
如果你对更多的数学感兴趣,这似乎是一篇非常好的文章: http://python-history.blogspot.co.nz/2010/08/why-pythons-integer-division-floors.html
答案 3 :(得分:0)
如前所述,python划分和舍入似乎是个问题 这是如何解决它
In [10]: int((111 - (111 + 2*17)*3375)/(-14.0))
Out[10]: 34947
In [11]: int((111 - (111 + 2*17)*3375)/(14.0)*-1 )
Out[11]: 34947