自动int到float转换

时间:2016-02-07 07:43:29

标签: python python-3.x floating-point

m = 10
x = 5
val = 1
print(type(val))
for i in range(1, x+1):
    val = (val * (m + i)) / (i)
    print(type(val))
    print(val)

这里最初val的类型为int但在循环中它会转换为float,尽管我按整数除法执行整数。为什么会这样?

2 个答案:

答案 0 :(得分:3)

您必须使用://

val = (val * (m + i)) // (i)

你的val将保持整数

/的行为改变了:https://www.python.org/dev/peps/pep-0238/

operator模块文档还提供了关于true division(返回浮动)和floor division之间的分离的提示,它返回发言权,因此int

https://docs.python.org/3/library/operator.html

答案 1 :(得分:1)

PEP 238 Semantics for True division 中指定:

  

intlong s 的真正除法会将参数转换为     float ,然后应用float部门。也就是说,即使是2/1也会     返回float2.0),而不是int。对于floatcomplex,它将与经典分部相同。

因此,当找到int时,会执行自动转换。请注意,这是Python 3中的默认行为。在python 2中,您需要import中的__future__才能获得类似的结果。