python中int和float的区别_关于python:检查数字是int还是float

我是这样做的:

1

2

3

4

5

6inNumber = somenumber

inNumberint = int(inNumber)

if inNumber == inNumberint:

print"this number is an int"

else:

print"this number is a float"

像那样。有没有更好的方法?

>5.0 = int(5.0)威胁

《冰上的两个搜索引擎的把戏,所以所有的其他问题,这是时代的要求。每个这些将提供一个重复的相同的标准答案。

…………………和你为什么需要知道?

相关:如何检查,如果一个float值是一个整数。

极移fails":它对larger数。

assert isinstance(inNumber, (int, float)),"inNumber is neither int nor float, it is %s" % type(inNumber)是我在寻找的时候发现了这个问题与谷歌。

"问题是不特别好卖。冰上的要求:1)"什么是对Python的变量类型的变量somenumber吗?"(2)冰somenumber全号码吗?3)的冰,冰somenumber字符串代表一个已知两个数,但冰的。它代表的整数或浮点数的价值?一些用例的计数器会出来一suitable知道服务解决方案。

使用IsTrime.

1

2

3

4

5

6>>> x = 12

>>> isinstance(x, int)

True

>>> y = 12.0

>>> isinstance(y, float)

True

所以:

1

2

3

4>>> if isinstance(x, int):

print 'x is a int!'

x is a int!

编辑:

如前所述,在长整数的情况下,上述方法不起作用。所以你需要做的是:

1

2

3

4

5

6>>> x = 12L

>>> import numbers

>>> isinstance(x, numbers.Integral)

True

>>> isinstance(x, int)

False

issubclass不是更通用吗?

@大卫:issubclass是一个错误,因为它在类上工作。isinstance检查给定对象是类的实例还是该类的子类之一,因此它是完全通用的。我认为isinstance(obj, cls)相当于issubclass(obj.__class__, cls)。

这不适用于其他整数类型,例如,如果x = 12L。我知道只有int被要求,但最好在其他问题发生之前解决它们。最通用的可能是isinstance(x, numbers.Integral)。

@Delnan谢谢,我不知道IsInstance检查了子类。考虑到这一点,很明显,现在做其他事情毫无意义。如果要检查到类标识,则可以编写type(obj) is cls。

@史考特:我不知道numbers的事,请随时更新这个问题,以防有人最终在这里寻找它。

@Scott都是numbers.Integral的python子类中的内置整型?

@大卫:assert isinstance(1, numbers.Integral) and isinstance(1L, numbers.Integral)(在python 3中,这是没有意义的,因为long被删除,int总是任意精度)。

@DavidHeffernan:numbers.Integral是一个抽象的基类,它允许任何人编写承诺表现为整数的类。任何内置类型当然都可以工作,但结果可能是混合的,否则,例如numpy.int16不是Integral。

对于python 2,还有直接的双重检查:isinstance(x, (int, long))。

警告:bools也是整数的实例。见isinstance(True, int)。

我最喜欢@ninjagecko的回答。

这也会起作用:

for Python 2.x

1isinstance(n, (int, long, float))

Python 3.x doesn't have long

1isinstance(n, (int, float))

复数也有复数类型

一班轮:

1isinstance(yourNumber, numbers.Real)

这样可以避免一些问题:

1

2>>> isinstance(99**10,int)

False

演示:

1

2

3

4

5

6

7

8

9

10

11

12>>> import numbers

>>> someInt = 10

>>> someLongInt = 100000L

>>> someFloat = 0.5

>>> isinstance(someInt, numbers.Real)

True

>>> isinstance(someLongInt, numbers.Real)

True

>>> isinstance(someFloat, numbers.Real)

True

在python 3中,isinstance(99**10,int)是True。

请求宽恕比请求许可更容易。只需执行操作即可。如果它起作用,物体是可接受的、合适的、合适的类型。如果操作不起作用,则对象的类型不合适。了解这种类型很少有帮助。

只需尝试操作并查看它是否工作。

1

2

3

4

5

6

7

8

9

10

11inNumber = somenumber

try:

inNumberint = int(inNumber)

print"this number is an int"

except ValueError:

pass

try:

inNumberfloat = float(inNumber)

print"this number is a float"

except ValueError:

pass

当type和isinstance可以完成这项工作时,有什么理由这样做吗?

int(1.5)不会产生valueerror,您显然知道——故意给出错误的答案?真的吗?

@格伦:我假设S.Lott把这个问题理解为"检查字符串是int还是float"(在这种情况下,它实际上是一个很好的解决方案)。

@A A:class MetaInt(type): pass; class Int(int): __metaclass__ = MetaInt; type(Int(1)) == int。(抱歉,语法错误,但我不能在一行上做更多的操作。)

答:是的。原因是这样更简单、更可靠。int和float之间的区别甚至可能与许多算法都不相关。显式地请求类型通常是不好的多态性或更严重的设计问题的标志。简而言之。不要检查类型。请求宽恕比请求许可更容易。

import math; print math.isnan('hi')对我来说是失败的,因为isnan预计会有int或float。我想把它包起来,这样_isnan('hi')就可以把False还给我了。我想让_isnan(float('nan'))返回True,但_isnan('nan')返回False。原因有点复杂——这与向自定义Web服务发送类似JSON的输入有关,我们希望区分?x="nan"和?x=nan(当在URL中提供时)。现在,我相信你的方法会以同样的方式对待'nan'和float('nan')。这不是我想要的。是鸭子的类型还是数学的问题。是吗?

这是Python的方式。

我将把这两个块反过来,从float开始,然后是int。否则,'3'将被视为一个浮点数,而实际上它是一个int。

你也可以用OCx1〔0〕来做例子:

1

2if type(inNumber) == int : print"This number is an int"

elif type(inNumber) == float : print"This number is a float"

这在[公认的罕见]的情况下会失败,因为所讨论的数字是int或float的子类。(因此,在我看来,为什么"存在"会被认为是"更好的")。

您可以使用模来确定x是否是数字整数。isinstance(x, int)方法仅确定x是否是按类型的整数:

1

2

3

4

5def isInt(x):

if x%1 == 0:

print"X is an integer"

else:

print"X is not an integer"

3.2 % 2生成1.4。威利,你在说什么?另外,如果x不是一个开始的数字,您将得到一个TypeError,因此如果您遵循这个建议,您的程序将提前退出…

@然后,可以使用isInstance()方法确定x是否是数字。此外,3.2%1的收益率为0.2。如果一个数能被1整除,它就是一个数字整数。这个方法对我很有用,尽管它可能不适合你。

这是正确的;x%1 == 0只对int为真(但对于小数点后只有零的浮点也为真)。如果你知道它将是一个int(例如,如果这是一个函数的参数),那么你可以用modulo检查一下。我敢打赌这比Math.floor(x) == x快。在不太乐观的方面,如果你通过一个像1.0或5.0那样的漂浮物,这将是True,你会遇到同样的问题,使用他/她的问题中提到的原始海报。

这简单地解决了我的问题,谢谢!

这里有一段代码检查一个数字是否是整数,它适用于python 2和python 3。

1

2

3

4

5

6

7

8

9import sys

if sys.version < '3':

integer_types = (int, long,)

else:

integer_types = (int,)

isinstance(yourNumber, integer_types) # returns True if it's an integer

isinstance(yourNumber, float) # returns True if it's a float

注意,python 2有两种类型:int和long,而python 3只有int类型。来源。

如果您想检查您的号码是否是代表int的float,请执行此操作

1(isinstance(yourNumber, float) and (yourNumber).is_integer()) # True for 3.0

如果你不需要区分int和float,并且两者都可以,那么Ninjagecko的答案就是要走的路。

1

2

3import numbers

isinstance(yourNumber, numbers.Real)

我知道这是一条旧线,但这是我正在使用的东西,我想它可能会有所帮助。

它在python 2.7和python 3中工作。

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19def is_float(num):

"""

Checks whether a number is float or integer

Args:

num(float or int): The number to check

Returns:

True if the number is float

"""

return not (float(num)).is_integer()

class TestIsFloat(unittest.TestCase):

def test_float(self):

self.assertTrue(is_float(2.2))

def test_int(self):

self.assertFalse(is_float(2))

这个解决方案怎么样?

1

2

3

4if type(x) in (float, int):

# do whatever

else:

# do whatever

请检查:导入编号

1

2

3

4

5

6

7

8

9

10

11import math

a = 1.1 - 0.1

print a

print isinstance(a, numbers.Integral)

print math.floor( a )

if (math.floor( a ) == a):

print"It is an integer number"

else:

print False

虽然x是浮点数,但值是整数,因此如果要检查值是整数,则不能使用isInstance,需要比较值而不是类型。

这就是我需要的,谢谢

在python版本3.6.3 shell中尝试过

1

2

3

4

5

6>>> x = 12

>>> import numbers

>>> isinstance(x, numbers.Integral)

True

>>> isinstance(x,int)

True

找不到任何工作。

试试这个…

1

2

3

4def is_int(x):

absolute = abs(x)

rounded = round(absolute)

return absolute - rounded == 0

1

2

3

4

5

6

7

8

9

10def is_int(x):

absolute = abs(x)

rounded = round(absolute)

if absolute - rounded == 0:

print str(x) +" is an integer"

else:

print str(x) +" is not an integer"

is_int(7.0) # will print 7.0 is an integer

func检查int,但对于.0的float也返回true。

请解释为什么/如何解决运营问题。

@heri他想检查一个数字是int还是float,我定义的函数可以做到这一点,abs是一个内置的python func,它返回数字的绝对值,round也是一个内置的func,它对数字进行四舍五入,如果我从绝对值中减去四舍五入的数字,得到一个零,那么这个数字是一个int,或者它有一个ze。在小数点后

variable.isnumeric检查值是否为整数:

1

2

3

4if myVariable.isnumeric:

print('this varibale is numeric')

else:

print('not numeric')

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值