Alex ☆ 想要改变世界的007程序员
在很多场景下都需要用到判断一个数是否为整数的需求,正好今天遇到了,在这里总结一下,以后可以继续补充。
1.type判断是否为整型
type() 函数如果你只有第一个参数则返回对象的类型,三个参数返回新的类型对象。
type() 方法的语法:
type(object)
type(name, bases, dict)
- name – 类的名称。
- bases – 基类的元组。
- dict – 字典,类内定义的命名空间变量。
# 一个参数实例
>>> type(1)
<type 'int'>
>>> type('runoob')
<type 'str'>
# 三个参数
>>> class X(object):
... a = 1
...
>>> X = type('X', (object,), dict(a=1)) # 产生一个新的类型 X
>>> X
<class '__main__.X'>
所以用type判断整数就很方便:
>>> type(1) == int
True
>>> type(1.0) == int
False
>>> type(1.0)
<class 'float'>
2.isinstance判断是否为整型
Python中isinstance() 函数来判断一个对象是否是一个已知的类型,类似 type()。
isinstance() 方法的语法:isinstance(object, classinfo)
>>>a = 2
>>> isinstance (a,int)
True
>>> isinstance (a,str)
False
>>> isinstance (a,(str,int,list)) # 是元组中的一个返回 True
True
isinstance() 与 type() 区别:
- type() 不会认为子类是一种父类类型,不考虑继承关系。
- isinstance() 会认为子类是一种父类类型,考虑继承关系。
如果要判断两个类型是否相同推荐使用 isinstance()。
class A:
pass
class B(A):
pass
isinstance(A(), A) # returns True
type(A()) == A # returns True
isinstance(B(), A) # returns True
type(B()) == A # returns False
用isinstance()判断整数跟type类似:
>>> isinstance(1, int)
True
>>> isinstance(1.0, int)
False
>>> isinstance(1.0, float)
True
3.%判断是否为整型
有的时候针对1.0这样的数据,其实也是int,但是在Python中却会被认为是float,对于一个不管是不是整型的数想要判断它是不是整数,可以借助%操作来实现。
>>> 1 % 1
0
>>> 1.0 % 1
0.0
>>> 1.1 % 1
0.10000000000000009
>>> 1.5 % 1
0.5
可以发现,一个整数不管是int类型还是float类型,对1取余都是0,所以可以根据这个特性来判断一个数是不是整数。
1.1 % 1 = 0.10000000000000009 是怎么回事?
其实类似的还有0.1 + 0.2 = 0.30000000000000004,其原因在于十进制和二进制的转换上,计算机先要把十进制的数转化为二进制,然后再计算。
但是,在转化中,浮点数转化为二进制,就出问题了,例如:十进制的 0.1,转化为二进制是:0.0001100110011001100110011001100110011001100110011…
也就是说,转化为二进制后,不会精确等于十进制的 0.1,同时,计算机存储的位数是有限制的,所以,就出现上述现象了。