我想做一个简单的整数除法,例如1/3=0
,但是uint64
的行为非常奇怪,导致我的结果被强制转换为float。为什么?在
python> uint64(100)/3
Out[0]: 33.333333333333336
python> uint64(100)/uint64(3)
Out[1]: 33
python> int64(100)/3
Out[2]: 33
python> int64(100)/uint64(3)
Out[3]: 33.333333333333336
python> int32(100)/int64(3)
Out[4]: 33
这是因为Python会看到有符号和无符号的类型,并尝试自动推断结果类型,而结果类型将是有符号的。但是,由于第一个64位数字是无符号的,签名版本需要65位。由于Python/Numpy中没有大于64位的整数类型,Python选择
float64
。标准类型即除数3
是int64
,这就是为什么第一个示例将被转换为float64
。 当然,这也适用于多种应用程序:注意,这种自动类型推断只适用于不同的有符号类型,因为它是不可知值的,否则几乎所有类型都必须以
^{pr2}$float64
结尾,因为例如,在连续三次乘法之后,它可能不再适合uint64
。在注意:在Python3中,简单的斜杠在默认情况下是整数除法。相反,在Python3中,您必须使用
3 // 2
将1
作为3 / 2 == 1.5
。在相关问题 更多 >
编程相关推荐