繁体   English   中英

在 Python 中判断一个值是否为整数

[英]Determining whether an value is a whole number in Python

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

y = x / 3

我想区分可以被 3 整除的x值,那些不是。

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

not float(your_number).is_integer()
if x % 3 == 0:
    print 'x is divisible by 3'

编辑:正如 Ollie 在这篇文章下面的评论中指出的那样, is_integer是标准库的一部分,因此不应像我在下面所做的那样重新实现。

这个 function 使用了这样一个事实,即每隔一个整数将至少有一个数可以被 2 整除而没有余数。 nn+1中的任何非零小数表示将导致n%2(n+1)%2都有余数。 这样做的好处是表示为浮点值的整数将返回 True。 据我所知,function 适用于正数和负数以及零。 如 function 中所述,对于非常接近 integer 的值,它会失败。

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

如果x / 3是 integer,则x % 3 == 0将为True

这是另一种方法:

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)。 如果减去底数后还剩下一些东西,那它不可能是一个整数。

假设您的意思是如果包含数字的字符串也有小数点:

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

在 Python 2 中,将 int 除以 int 返回 int(除非使用-Qnew选项调用 python,或者from __future__ import division位于源的开头;在这种情况下/返回一个浮点数); a //指定 integer 划分。

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

如果您想知道一个 int 是否会准确地划分为另一个 int,请使用“%”查找余数。

转换 1.0 => 1 & 转换 1.x => 1.x

如果浮点数具有像 1.5 这样的小数部分,则此代码将返回 1.5,如果是 35.00,则返回 35:

a = ReadFrom()    
if float(a).is_integer(): # it is an integer number like 23.00 so return 23
       return int(a)
 else: # for numbers with decimal part like : 1.5 return 1.5
       return float(a)

最好在进行除法之前做出决定,假设您的 x 变量是 integer。

尝试对浮点数进行相等性测试或比较是危险的: http://www.lahey.com/float.htm

在进行除法之前已经使用模数提供了答案,以查看一个 integer 是否可以被另一个 integer 整除是安全的。 在您进行除法并处理可能的浮点值之后,数字不再是整数或不是整数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM