2013-12-19 84 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