python:类似浮点数的整数
当数字没有小数时,我尝试将浮点转换为intpython:类似浮点数的整数,python,floating-point,Python,Floating Point,当数字没有小数时,我尝试将浮点转换为int 从数学导入modf def float_like_int(n): 如果abs(modf(n)[0])
从数学导入modf
def float_like_int(n):
如果abs(modf(n)[0])<1e-6:
返回整数(n)
返回n
打印浮点数(10.1)
打印浮点数(10.00001)
打印浮点数(10.000001)
打印浮点数(10.0)
存在标准函数还是更通用的方法?(没有1e-6)也许这样更自然
def float_like_int(n):
if int(n) == float(n):
return int(n)
else:
return float(n)
我认为以下内容比您的版本更具可读性:
def float_like_int(n):
if round(n, 6) == round(n):
return int(round(n))
return n
请注意,这与您的函数的含义略有不同,因为它也会将类似于
9.9999999
的内容舍入到10
您可以使用此函数:
def isWhole(x):
if(x%1 == 0):
return True
else:
return False
如果分数部分小于1e-6(0.000001),则使用trys生成整数的方法。这意味着如果你有一个数字4.000001(实际上是浮点),你的函数将丢弃小数部分。您可以将1e-6更改为另一个值,符合条件的数字将转换为int 这是我的代码,没有导入任何额外的模块。此代码不会丢弃任何小数部分 定义函数(a): 如果(a*10)%10==0: 返回整数(a) 其他: 归还 f=4.03 打印功能(23.45) 打印功能(f) 打印功能(2.3)
似乎14.00006应该被视为14,因为它足够接近了。@glglgl:那不是真的:float(14.00006)!=int(14.00006)如果您想要四舍五入,那么像F.J一样使用
round()
的答案最有意义。我在想,他的意思不是“没有1e-6”,对,而是abs(modf(14.0000006)[0])<1e-6。因此,您的解决方案与OP的不同。(对不起,我在前面的评论中忘记了两个0
s。)x.is_integer()
更简单。:-)
def isWhole(x):
if(x%1 == 0):
return True
else:
return False