Python对numpy数值调用round取整返回带.0浮点数问题咨询
问题原因解答
这个返回值类型的差异是Python内置round函数的调度逻辑、以及numpy对象的方法实现差异共同导致的,核心原因如下:
- 首先,Python内置
round处理非原生类型时,会优先调用对象自身实现的__round__魔法方法,而非强制走原生round的整数返回规则。 - 两个测试用例的输入类型本身存在本质区别:
np.pi是numpy预定义的特殊常量,类型为Python原生float,调用原生round逻辑,省略精度参数时返回整数类型,因此得到3。np.sqrt(2)的返回值是numpy.float64类型的numpy标量,它的__round__方法为了保持浮点运算的类型一致性,就算四舍五入结果为整数,也会返回浮点类型,因此得到带.0后缀的1.0。
你可以通过以下代码验证输入类型的差异:
import numpy as np print(type(np.pi)) # 输出:<class 'float'> print(type(np.sqrt(2))) # 输出:<class 'numpy.float64'>
如果需要统一获得整数类型的返回结果,可以主动做类型转换:
# 方法1:对结果强制转原生整数 int(round(np.sqrt(2))) # 返回值为 1 # 方法2:使用numpy内置方法转换 int(np.rint(np.sqrt(2))) # 返回值为1
内容的提问来源于stack exchange,提问作者Oortone
相关产品推荐
相关产品推荐

