2011-06-04 49 views
12

我想确定Python中的数值是否是整数。例如,给定:确定值是否是Python中的整数

y = x/3 

欲其是均匀被3整除那些不是x值之间进行区分。

+5

这是什么意思由小数在这种情况下?整数是一个整数。它始终是一个整数。不知何故,它听起来像你想检查一个疾病的整数:*这个整数有小数,我们必须把它带到医院!*;) – 2011-06-04 23:18:56

+2

这是什么意思的“小数”在这种情况下?小数点?整数从来没有它们(一个带小数点的数字被解析为一个浮点数)。 – 2011-06-04 23:19:06

+1

根据定义,整数没有小数。田田!你完成了! – 2011-06-04 23:20:15

回答

23
if x % 3 == 0: 
    print 'x is divisible by 3' 
+1

@lev这里回答问题的一部分是理解OP实际上要问什么。阅读不仅仅是问题的标题。在这里很显然,OP想知道如何判断一个数字是否可以被另一个数字整除。通过检查除法的结果是否是整数来做到这一点,是不可靠的,并且容易出错。 – interjay 2016-05-10 11:44:02

+1

重要提示:这不会检查数字是否为小数,因为问题的标题和部分会被要求提供。例如,如果您有x == 0.3,则上面的代码将打印'x可被3整除,但x不是整数。请参阅Artur Gaspar答案以检查数字是否为小数。 @interjay应该这样做。 – lev 2016-05-10 12:59:10

1

假设你的意思是,如果包含数字的字符串也有一个小数点:

Python 2.6.6 (r266:84292, Apr 20 2011, 11:58:30) 
[GCC 4.5.2] on linux2 
Type "help", "copyright", "credits" or "license" for more information. 
>>> number='123.4' 
>>> '.' in number 
True 
>>> number='123' 
>>> '.' in number 
False 
>>> 

为了测试它的积分,你可以国防部1:

>>> 1.0/3 % 1 
0.33333333333333331 
>>> 1/3 % 1 
0 
3

x % 3 == 0True如果x/3是一个整数。

49

整数没有小数。如果你的意思是“是否一些在Python有小数”,你可以这样做:

not float(your_number).is_integer() 
+1

相关文档:http://docs.python.org/library/stdtypes.html#float.is_integer – Olli 2012-04-10 15:12:40

+2

'is_integer()'是答案 – 2014-01-14 16:51:33

1

在Python 2,由一个int将一个int返回一个int(除非蟒蛇是用-Qnew选项调用,或from __future__ import division位于源的开头;在这种情况下,/返回浮点数);一个//指定整数除法。

在Python 3中,如果使用“/”,则将int除以int将返回浮点数,如果使用“//”则返回int。

如果你想知道一个int是否会精确地分成另一个int,使用“%”来寻找一个余数。

-1

最好在做分割之前做出决定,假设你的x变量是一个整数。

争取做相等测试或比较上浮点数是危险的:http://www.lahey.com/float.htm

答案已经在使用模做除法之前,看看是否一个整数是divsible由其他整数是安全的提供。在你进行分割并且正在处理可能的浮点值之后,那么数字不再是完全的整数。

4

编辑:As Ollie在本文后面的评论中指出,is_integer是标准库的一部分,因此不应像我在下面那样重新实现。

该函数使用这样一个事实,即每个其他整数都将至少有一个可以被二整除的数,而没有余数。 nn+1中的任何非零分数表示都会导致n%2(n+1)%2有余数。这具有以浮点值表示的整个数字将返回True的优点。 该函数正确地工作正面 和负数和零,只要我可以确定。正如函数中所提到的,它的值非常接近整数。

def isInteger(n): 
    """Return True if argument is a whole number, False if argument has a fractional part. 

    Note that for values very close to an integer, this test breaks. During 
    superficial testing the closest value to zero that evaluated correctly 
    was 9.88131291682e-324. When dividing this number by 10, Python 2.7.1 evaluated 
    the result to zero""" 

    if n%2 == 0 or (n+1)%2 == 0: 
     return True 
    return False 
+1

正如先前回答(http://stackoverflow.com/a/6239987/592174 ),is_integer是Python标准库的一部分。 http://docs.python.org/library/stdtypes.html#float.is_integer你不应该重新实现它。 – Olli 2012-04-10 15:13:47

1

这里的另一种方法:

x = 1/3 # insert your number here 
print(x - int(x) == 0) # True if x is a whole number, False if it has decimals. 

这工作,因为INT(x)的基本需要数量的楼层(如3.6453 - > 3)。如果减去地板后还有什么东西遗留下来,它不可能是一个整数。