函数int()是向负无穷舍入(向下取整)还是向零舍入?
我看到有个问题提到,为什么在C++中-1/2的结果是0,而在Python中是-1。这个问题提到,Python中的整数除法是向上取整的,也就是说,结果会向下取整。
我原以为int(value)
这个函数也会像floor
那样处理,但实际上我发现int(-1.5)
的结果是-1,这让我有点困惑,因为我本来以为应该是-2。
所以我的问题是:为什么整数除法和int()
函数的规则不一致呢?有没有什么合理的解释呢?
2 个回答
0
也许使用 round()
函数,并把 ndigits
设置为 0,会更接近你想要的结果。不过要注意,round()
函数返回的不是整数,而是浮点数。你可以查看 官方文档 了解更多信息。
4
int()
这个函数会去掉小数部分,但它并不会进行四舍五入。从官方文档来看:
如果 x 是浮点数,转换时会向零方向截断。
把一个 float
转换成 int
这样的行为是很合理的。这并不是除法、向下取整或其他操作。
而 //
这个向下取整的除法运算符显然是会向下取整,而不是截断。在 Python 2 中,对于两个整数操作数,/
的除法也会向下取整。再次参考官方文档:
结果是数学除法的结果,并对结果应用了“向下取整”函数。
而math.floor()
的说明是:
返回 x 的向下取整值,作为浮点数,返回小于或等于 x 的最大整数值。
我认为这里没有矛盾;除法是向下取整,而将浮点数转为整数是截断。