我希望找到一种方法来实现以下目标:对于5.0的赞,返回5。对于不能等于任何整数的5.1赞,返回Error。
当前,我将int()与“ if integer!= float”一起使用。但这有问题,例如,我将无法判断出不平等是由5.1还是1111111111111111.0(甚至更大的数字)引起的。
与潜在的,简单的单行命令相比,这也非常麻烦。那么在Python中是否有执行此操作的命令?
答案 0 :(得分:10)
Python中的浮点对象有一个is_integer()
谓词。
def strict_int(x):
if x.is_integer():
return int(x)
raise ValueError
请注意,int
个对象不是具有此谓词。如果尝试在int上调用此属性,则会出现属性错误。
如果您想使用一些错误值而不是异常,则可以使用这种单线格式
int(x) if x.is_integer() else 'Error'
答案 1 :(得分:2)
按照answer的@Anthony V的建议使用math
,如下所示:
>>> frac, whole = math.modf(5.0)
>>> if frac ==0.0:
... print("this is a whole")
... else:
... print("this is not whole and should return the Error")
这应该很容易工作。
答案 2 :(得分:1)
我不确定是否有更惯用的方法来执行此操作,但是直觉上,您可以比较int
和float
的值,并在它们相等时返回。 / p>
那是
def weird_cast(my_float):
if int(my_float) == my_float:
return int(my_float)
return None # or some error
答案 3 :(得分:0)
def return_int(a):
if int(a)==a:
print(int(a)) #you can store the integer value in separate variable #also b = int(a)
#instead of using print you can use return b or int(a)
else:
print('Error') #or you can use return 'Error'
a = 5.0
return_int(a)
答案 4 :(得分:0)
也许另一种更简单的方法是减去舍入后的数字本身。 如果余数大于0.0且小于1.0,则可以将其称为浮点数,否则为整数
def IntegerSanityCheck ( num ):
remainder = abs ( round ( num ) - num )
if ( remainder > 0.0 ) and ( remainder < 1.0 ):
print "Float"
else:
print "Integer"
或者您可以按照user2906838的建议使用math