2013-12-19 173 views
-4

对不起,以前的含糊不清。我需要测试一个给定的变量是否是一个整数(如果存在差异,则不是数学上的整数定义)。我目前使用函数将非整数转换为整数python

isinstance([var],(int,long))。

当给定2作为变量(var)它打印真实。但是,当给出2.0它打印假。

这是一个问题,因为我需要一个函数来响应2.0,2.00,2000和任何数字上等于整数的数字是一个整数。虽然这些数字在数字上不等效(1.4,3.14,2.7等)是非整数有没有我可以用来实现这个功能或特定的代码?

注意:我相信,根据以前的反馈,“pythonically”2.0实际上并不是一个整数。即使如此,它在数学上,功能必须返回它。

+0

你看过http://docs.python.org/2/library/stdtypes的.html#数值类型-INT-浮动长期复杂吗? –

+0

你是否有机会通过使用'eval(raw_input('Enter a integer:'))'或'input('输入整数:')'直接评估用户的输入? – Blender

+0

为什么这个问题不清楚?我不明白。 – Makoto

回答

3

为什么不将它转换为int?

>>> int(2.00) 
2 
1

我知道,这是更容易更容易请求原谅比蟒蛇 权限,但在这种情况下,有必要

Offcourse,你可以ask for forgiveness here rather than permission。首先假设你有一个整数,如果不是,则重复ask for forgiveness

while True: 
    try: 
     value = int(raw_input()) 
     break 
    except ValueError: 
     pass 

但是,如果你仍然想ask for permission,你可能反而要以下列方式承担使用isinstance,浮子可以被转换为整数

isinstance(2.0,(int,long, float)) 
+0

函数“isinstance(var,(int,long,float))”正是我所需要的!谢谢。 – user2944352

0

也许我误解了这个问题我第一个答案。如果你试图区分7.00和7.01,你可以使用类似的东西,这将达到一定的精度:

def likeint(value): 
    return value - int(value) == 0 


>>> likeint(8.0) 
True 
>>> likeint(7.0000000001) 
False 
>>> likeint(7.0000000000) 
True 
>>> likeint(7) 
True