当数字没有小数时,我尝试将float转换为int。
from math import modf
def float_like_int(n):
if abs(modf(n)[0]) < 1e-6:
return int(n)
return n
print float_like_int(10.1)
print float_like_int(10.00001)
print float_like_int(10.000001)
print float_like_int(10.0)
存在标准功能还是更通用的方式? (没有1e-6)
答案 0 :(得分:3)
我认为以下内容比您的版本更具可读性:
def float_like_int(n):
if round(n, 6) == round(n):
return int(round(n))
return n
请注意,这与您的函数的含义略有不同,因为它还会将9.9999999
转换为10
。
答案 1 :(得分:3)
如果小数部分小于1e-6(0.000001),那么您正在使用的方法试图使数字整数。这意味着如果你有一个数字4.000001(实际上是浮点数),你的函数将丢弃小数部分。您可以将1e-6更改为其他值,这些符合条件的数字将转换为 int 。
这是我的代码,没有导入任何额外的模块。此代码不会丢弃任何小数部分。
def Func(a):
if (a * 10) % 10 == 0:
return int(a)
else:
return a
f = 4.03
print Func(23.45)
print Func(f)
print Func(2.3)
答案 2 :(得分:1)
也许这样的事情更自然?
def float_like_int(n):
if int(n) == float(n):
return int(n)
else:
return float(n)
答案 3 :(得分:0)
您可以使用此功能:
def isWhole(x):
if(x%1 == 0):
return True
else:
return False