Pythonで数値が整数か小数か判定する方法|型・値の判定をわかりやすく解説

Pythonでは、数値が「整数なのか」「小数なのか」を判定したいケースがあります。

たとえば、変数に入っている値が 10 なのか 10.5 なのかを判定したり、10.0 のような「小数型だけれど値としては整数」の数値を判定したりする処理です。

この記事では、Pythonで数値が整数か小数かを判定する方法を、初心者向けにわかりやすく解説します。

Pythonで整数か小数かを判定する基本

Pythonでは、整数は int 型、小数は float 型として扱われます。

num1 = 10
num2 = 10.5

print(type(num1))
print(type(num2))

実行結果は次のようになります。

<class 'int'>
<class 'float'>

そのため、isinstance() を使えば整数か小数かを判定できます。

num = 10

if isinstance(num, int):
    print("整数です")
elif isinstance(num, float):
    print("小数です")

実行結果:

整数です

isinstance()で整数か小数か判定する

Pythonで数値の型を判定する場合、isinstance() を使う方法がおすすめです。

num = 12.5

if isinstance(num, int):
    print("整数です")
elif isinstance(num, float):
    print("小数です")

実行結果:

小数です

isinstance()の基本構文

isinstance(値, 型)

たとえば、次のコードでは 10int 型かどうかを判定しています。

print(isinstance(10, int))
print(isinstance(10.5, int))

実行結果:

True
False

小数についても同様に判定できます。

print(isinstance(10.5, float))
print(isinstance(10, float))

実行結果:

True
False

type()を使って判定する方法

type() を使って整数か小数かを判定することもできます。

num = 10.5

if type(num) == int:
    print("整数です")
elif type(num) == float:
    print("小数です")

実行結果:

小数です

ただし、通常は type() よりも isinstance() を使うほうが柔軟です。

type()とisinstance()の違い

num = 10

print(type(num) == int)
print(isinstance(num, int))

どちらも True になります。

ただし、クラスの継承関係などを考慮すると、isinstance() のほうがPythonでは一般的な型判定方法です。

そのため、型を判定するときは次の書き方をおすすめします。

isinstance(num, int)

「10.0」は整数?小数?

ここはPythonで数値を判定するときに注意したいポイントです。

num = 10.0

この値は、数学的には整数ですが、Pythonでは float 型です。

print(type(10.0))

実行結果:

<class 'float'>

したがって、次のコードは False になります。

print(isinstance(10.0, int))

一方、次のコードは True です。

print(isinstance(10.0, float))

つまり、「値が整数か」と「データ型が整数か」は別の話です。

10.0のような数値を「整数」と判定する方法

「10.0はfloat型だけれど、小数部分が0なので整数として扱いたい」という場合があります。

この場合は is_integer() が便利です。

num = 10.0

if num.is_integer():
    print("整数として扱えます")
else:
    print("小数です")

実行結果:

整数として扱えます

一方、10.5 の場合は次のようになります。

num = 10.5

if num.is_integer():
    print("整数として扱えます")
else:
    print("小数です")

実行結果:

小数です

is_integer()とは

is_integer() は、float の値に小数部分が存在するかを判定するメソッドです。

print(10.0.is_integer())
print(10.5.is_integer())

実行結果:

True
False

整数と小数をまとめて判定する

「整数型なら整数、小数型なら小数」と単純に判定するなら、次のように書けます。

num = 10.5

if isinstance(num, int):
    print("整数")
elif isinstance(num, float):
    print("小数")
else:
    print("数値ではありません")

実行結果:

小数

float型の「10.0」も整数と判定する

「10」と「10.0」の両方を整数として判定したい場合は、少し処理を変えます。

num = 10.0

if isinstance(num, int):
    print("整数")
elif isinstance(num, float) and num.is_integer():
    print("整数")
else:
    print("小数")

実行結果:

整数

複数の数値をまとめて判定することもできます。

numbers = [10, 10.0, 10.5, 20.0, 20.25]

for num in numbers:
    if isinstance(num, int):
        print(num, "→ 整数")
    elif isinstance(num, float) and num.is_integer():
        print(num, "→ 整数")
    else:
        print(num, "→ 小数")

実行結果:

10 → 整数
10.0 → 整数
10.5 → 小数
20.0 → 整数
20.25 → 小数

割り算の結果が整数か小数か判定する

Pythonでは、通常の / を使った割り算の結果は float になります。

num = 10 / 2

print(num)
print(type(num))

実行結果:

5.0
<class 'float'>

値としては 5 ですが、型は float です。

このような場合に is_integer() を使うことができます。

num = 10 / 2

if num.is_integer():
    print("整数です")
else:
    print("小数です")

実行結果:

整数です

剰余演算子で小数部分を判定する方法

数値の小数部分があるかどうかは、剰余演算子 % を使って判定することもできます。

num = 10.5

if num % 1 == 0:
    print("整数")
else:
    print("小数")

実行結果:

小数

10.0 の場合は次のようになります。

num = 10.0

if num % 1 == 0:
    print("整数")
else:
    print("小数")

実行結果:

整数

ただし、単純に float の小数部分を判定するのであれば、is_integer() のほうが意図が明確です。

文字列の「10」「10.5」を判定する場合

注意したいのが、入力フォームや input() から受け取った数値です。

input() の戻り値は文字列です。

num = input("数値を入力してください:")

print(type(num))

例えば 10 と入力すると、次のようになります。

<class 'str'>

そのため、次のような判定はできません。

num = input("数値を入力してください:")

if isinstance(num, int):
    print("整数")

input() の結果を数値に変換する必要があります。

整数として変換する場合

num = int(input("整数を入力してください:"))

小数として変換する場合

num = float(input("小数を入力してください:"))

「入力された文字列が整数なのか小数なのかわからない」という場合は、float() を利用する方法があります。

text = input("数値を入力してください:")

try:
    num = float(text)

    if num.is_integer():
        print("整数です")
    else:
        print("小数です")

except ValueError:
    print("数値ではありません")

10 と入力すると、

整数です

10.5 と入力すると、

小数です

と判定できます。

Pythonで整数か小数かを判定する方法まとめ

Pythonで数値が整数か小数かを判定する方法には、いくつかあります。

判定方法 用途
isinstance(num, int) int型か判定
isinstance(num, float) float型か判定
type(num) == int 型を厳密に判定
type(num) == float float型を厳密に判定
num.is_integer() floatの値が整数か判定
num % 1 == 0 小数部分があるか判定

特に覚えておきたいのは、「型を判定する」のか「数値として整数かを判定する」のかを区別することです。

例えば、

num = 10.0

の場合、

isinstance(num, int)

False ですが、

num.is_integer()

True です。

つまり、10.0型としてはfloat型だが、値としては整数です。

まとめ

Pythonで数値が整数か小数か判定する場合、目的によって方法を使い分けるのがポイントです。

データ型を判定したい場合は、isinstance() を利用します。

if isinstance(num, int):
    print("整数型")
elif isinstance(num, float):
    print("小数型")

値として整数か判定したい場合は、is_integer() が便利です。

if num.is_integer():
    print("整数")
else:
    print("小数")

Python初心者の場合は、intfloatというデータ型の違いと、「10.0のようにfloat型でも整数として扱える値」があることを理解しておくと、数値処理でのミスを減らせます。

この記事のポイント

  • Pythonの整数は int、小数は float として扱われる
  • 型を判定するなら isinstance() が便利
  • 10.0 はfloat型だが、値としては整数
  • floatの値が整数かどうかは is_integer() で判定できる
  • input() の戻り値は文字列なので、数値に変換してから判定する

プログラミング学習に興味がある方は、まずは無料体験会へ

無料体験会・お申し込みはこちら