数値がintまたはfloatかどうかを確認します


200

ここに私がそれをした方法があります:

inNumber = somenumber
inNumberint = int(inNumber)
if inNumber == inNumberint:
    print "this number is an int"
else:
    print "this number is a float"

そんな感じ。
これを行うための見栄えの良い方法はありますか?


4
トリックは、この質問が尋ねられた他のすべての時間についてSOを検索することです。それらのそれぞれは、同じ、標準的な答えの繰り返しを提供します。
S.Lott、

1
...そして、なぜあなたは知る必要があるのですか?
Karl Knechtel、2010


@Wooble:より大きい数では失敗します
jfs 2014年

assert isinstance(inNumber, (int, float)), "inNumber is neither int nor float, it is %s" % type(inNumber)Googleでこの質問を見つけたときに探していたものでした。
Martin Thoma

回答:


285

isinstanceを使用します

>>> x = 12
>>> isinstance(x, int)
True
>>> y = 12.0
>>> isinstance(y, float)
True

そう:

>>> if isinstance(x, int):
        print 'x is a int!'

x is a int!

_編集:_

指摘したように、長整数の場合、上記は機能しません。だからあなたはする必要があります:

>>> x = 12L
>>> import numbers
>>> isinstance(x, numbers.Integral)
True
>>> isinstance(x, int)
False

issubclassより一般的ではないでしょうか?
David Heffernan

3
@David:issubclassクラスで機能するため、エラーになります。isinstance指定されたオブジェクトがクラスのインスタンスであるか、そのクラスのサブクラスの1つであるかをチェックするため、完全に汎用的です。Methinks isinstance(obj, cls)と同等ですissubclass(obj.__class__, cls)

7
これは、他の整数型、たとえばの場合は機能しませんx = 12L。私intは頼まれただけだと知っていますが、他の問題が発生する前に修正するのは良いことです。最も一般的なものはおそらくisinstance(x, numbers.Integral)です。
スコットグリフィス

9
Python 2の場合は、直接の二重チェックもありますisinstance(x, (int, long))
Eric O Lebigot 2013

1
警告:boolも整数のインスタンスです。参照isinstance(True, int)
jtschoonhoven 2018

95

@ninjageckoの答えが一番好きです。

これも機能します:

Python 2.xの場合

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

Python 3.xは長くありません

isinstance(n, (int, float))

複素数にはタイプcomplexもあります


余談ですが、ブール値はTrueに解決されるため(例:)、代わりisinstance(False, (int, float)) = Trueに私が必要でしnot isinstance(n, bool) and isinstance(n, (int, float))
YTZ

54

一発ギャグ:

isinstance(yourNumber, numbers.Real)

これはいくつかの問題を回避します:

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

デモ:

>>> import numbers

>>> someInt = 10
>>> someLongInt = 100000L
>>> someFloat = 0.5

>>> isinstance(someInt, numbers.Real)
True
>>> isinstance(someLongInt, numbers.Real)
True
>>> isinstance(someFloat, numbers.Real)
True

6
Python 3ではisinstance(99**10,int)ですTrue
カルロスA.ゴメス

12

許可を求めるよりも許しを求める方が簡単です。操作を行うだけです。機能する場合、オブジェクトは許容可能で適切な適切なタイプでした。操作が機能しない場合、オブジェクトは適切なタイプではありませんでした。タイプを知ることはほとんど役に立ちません。

単に操作を試み、それが機能するかどうかを確認してください。

inNumber = 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

5
仕事typeisinstanceするときにできる理由はありますか?
user225312 2010

9
int(1.5)はValueErrorを発生させません、そしてあなたは明らかにそれを知っています-故意に間違った答えを与えること?マジ?
Glenn Maynard 2010

4
@Glenn:S.Lottが質問を「文字列がintまたはfloatであるかどうかを確認する」と理解したと思います(この場合、実際には良い解決策です)。

@ AA: class MetaInt(type): pass; class Int(int): __metaclass__ = MetaInt; type(Int(1)) == int。(構文が悪いので申し訳ありませんが、1行でこれ以上行うことはできません。)
mg。

2
@AA:はい。これは、これがより簡単で信頼性が高いためです。との違いはintfloat多くのアルゴリズムには関係がない場合もあります。型を明示的に要求することは、通常、ポリモーフィズムが悪いこと、またはさらに深刻な設計上の問題の兆候です。要するに。タイプをチェックしないでください。許可を求めるよりも許しを求める方が簡単です。
S.Lott、

10

あなたもできることは、type() 例を使用することです:

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

1
これは、問題の数がintまたはfloatのサブクラスである[確かにまれな]ケースでは失敗します。(したがって、「インスタンス」が「より良い」と見なされる理由、IMO。)
Dan H

7

これは、数値が整数かどうかをチェックするコードの一部で、Python 2とPython 3の両方で機能します。

import 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ソース

あなたの番号がfloatを表すかどうかを確認したい場合は、intこれを行ってください

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

intとfloatを区別する必要がなく、どちらでもかまわない場合、ninjageckoの答えは行く方法です

import numbers

isinstance(yourNumber, numbers.Real)

6

このソリューションはどうですか?

if type(x) in (float, int):
    # do whatever
else:
    # do whatever

6

私はそれが古いスレッドであることを知っていますが、これは私が使用しているものであり、役立つかもしれないと思いました。

Python 2.7とPython 3 <で動作します。

def 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))

5

moduloを使用して、xが数値的に整数であるかどうかを判別できます。このisinstance(x, int)メソッドは、xが整数かどうかをタイプごとに決定するだけです。

def isInt(x):
    if x%1 == 0:
        print "X is an integer"
    else:
        print "X is not an integer"

3.2 % 2利回り1.4。Whatchu talkin '' bout、Willi(s | am)?また、TypeErrorxが最初の数値でない場合はaが返されるので、このアドバイスに従えばプログラムは途中で終了します...
dylnmc

@dylnmc次に、isinstance()メソッドを使用して、xが数値かどうかを判断できます。また、3.2%1は0.2になります。数値が1で割り切れる場合、それは数値的には整数です。この方法は、あなたのためではなかったかもしれませんが、私にとっては役に立ちました。
William Gerecke

これは本当です; x%1 == 0intのみに当てはまる必要があります(ただし、小数点に続くゼロのみを持つfloatにも当てはまります)。それがintになることがわかっている場合(たとえば、これが関数のパラメーターである場合)は、単にmoduloを使用して確認できます。私はそれがより速いと思いMath.floor(x) == xます。それほど明るくない側では、これはまたはのTrueようなフロートを渡した1.0場合5.0であり、元のポスターの質問で述べたものを使用して同じ問題が発生します。
dylnmc 2017年

5

Pythonバージョン3.6.3シェルで試した

>>> x = 12
>>> import numbers
>>> isinstance(x, numbers.Integral)
True
>>> isinstance(x,int)
True

働くために何かを理解することができませんでした。


4

plsはこれをチェックします:インポート番号

import 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を使用できず、型ではなく値を比較する必要があります。



0

更新:これを試してください


inNumber = [32, 12.5, 'e', 82, 52, 92, '1224.5', '12,53',
            10000.000, '10,000459', 
           'This is a sentance, with comma number 1 and dot.', '121.124']

try:

    def find_float(num):
        num = num.split('.')
        if num[-1] is not None and num[-1].isdigit():
            return True
        else:
            return False

    for i in inNumber:
        i = str(i).replace(',', '.')
        if '.' in i and find_float(i):
            print('This is float', i)
        elif i.isnumeric():
            print('This is an integer', i)
        else:
            print('This is not a number ?', i)

except Exception as err:
    print(err)

はい、そうでしたが、うまくいきませんでした。そして、あなたは本当にそれを試さなかったと確信しています。動かないから。
JJJ

確かに、より攻撃的な対応方法があります。あなたが正しいとはいえ、私はもっと多くのテストを実行するだけです。
Magotte

@JJJこのソリューションはどうですか?
Magotte

0

単純なifステートメントでそれを行うことができます

フロートを確認するには

type(a)== type(1.1)の場合

整数型を確認するには

type(a)== type(1)の場合


-1
def 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である浮動小数点数についてもtrueを返します
Gideon Lytes

あなたの貢献がOPの質問を解決する理由/方法を説明してください。
Heri

@Heri彼は数値がintかfloatかどうかを確認しようとしています。定義した関数はそれを実行できます。absは数値の絶対値を返す組み込みのPython funcであり、roundも組み込みのfuncで丸めます数値、丸めた数値を絶対値から減算してゼロが得られた場合、その数値はintであるか、小数点以下がゼロである
Gideon Lytes

-1

これを試して...

def is_int(x):
  absolute = abs(x)
  rounded = round(absolute)
  return absolute - rounded == 0

-5

variable.isnumeric 値が整数かどうかを確認します。

 if myVariable.isnumeric:
    print('this varibale is numeric')
 else:
    print('not numeric')
弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.