为什么Python中 -5 / 3 == -2

魔神翼 发布于 2014/07/25 15:07
阅读 674
收藏 0

Java和C/C++的结果都是-1

在Python中怎么得到-1?

加载中
0
Happy_Ending
Happy_Ending

http://python-history.blogspot.com/2010/08/why-pythons-integer-division-floors.html

个人翻译能力不行,你可以读一读这篇文章。

魔神翼
魔神翼
great article!
0
0
freesnow
freesnow
def ceil(x, y):
    return int((x+y-1)/y)

然后ceil(-5,3)或者直接

int((-5+3-1)/3)



0
雪梨苹果
雪梨苹果

python的除法不同的,分传统除(分整数和浮点数),地板除(不分整数和浮点数),精确除。

from __future__ import division
from math import ceil
int(ceil(-5/3))



就等于-1。

魔神翼
魔神翼
回复 @雪梨苹果 : int()自动向零取整,不需要ceil()函数了
雪梨苹果
雪梨苹果
回复 @魔神翼 : 看了c是向零取整的,和python不同。。我去。。。我也不会模拟。。
魔神翼
魔神翼
回复 @雪梨苹果 : 其实我只是想知道为什么和C/C++不同
雪梨苹果
雪梨苹果
回复 @魔神翼 : 按你要求5/3不是等于2么,向上舍。你想是1?整个计算是取向0进行舍?
魔神翼
魔神翼
那5/3又不正确了
0
svice
svice
>>> -5/3

-1.6666666666666667

至于为什么和C/C++不同,这个不过是一个语言实现的不同,就像数组下标,有的从0开始,有的从1开始

0
PYPlus
PYPlus

这个问题比较有趣, C标准: 如果x/y是合法的, 那么(x/y)*y+x%y就一定等于x. 问题就在于除法的取整(一正一负))问题到底是向0取整还是向无穷小取整. 所以你说c中-5/3的结果为-1 是目前大部分C实现是这样的. 也有可能结果是-2. Python是向无穷小取整

返回顶部
顶部