Pythonで数値が整数か小数かを判定する実践テクニック
Pythonで数値を扱う際、その値が整数なのか小数(浮動小数点数)なのかをプログラムで判定したい場合があります。例えば、ユーザーからの入力値のバリデーションや、特定の計算処理を分ける際に必要になります。この記事では、Pythonで数値が整数か小数かを判定するための様々な方法を、それぞれのメリット・デメリットとともに詳しく解説します。
🔍 isinstance()関数で型を判定する
Pythonで数値が整数か小数かを判定する最も直接的な方法は、組み込み関数**isinstance()**を使って変数の型をチェックすることです。
isinstance()の基本的な使い方
isinstance(object, classinfo)は、objectがclassinfoのインスタンスであるか、またはそのサブクラスのインスタンスである場合にTrueを返します。
# isinstance()を使った型判定
num_int = 10
num_float = 3.14
num_str = "hello"
print(isinstance(num_int, int)) # True
print(isinstance(num_float, float)) # True
print(isinstance(num_str, str)) # True
print(isinstance(num_int, float)) # False
print(isinstance(num_float, int)) # False
この方法はシンプルで明確ですが、float型で「実質的に整数」である値(例: 5.0)を整数として扱いたい場合には適していません。5.0はfloat型なのでisinstance(5.0, int)はFalseになります。
💡 float型が「実質的に整数」かを判定する
浮動小数点数(float型)の中には、1.0, 2.0のように小数点以下がゼロで、実質的には整数として扱える値が存在します。これらを整数として判定したい場合、いくつかの方法があります。
1. floatをintに変換して比較する
小数点以下の部分を切り捨てて整数に変換し、元の値と比較する方法です。
# float型が実質的に整数かを判定
num1 = 5.0
num2 = 5.5
print(num1 == int(num1)) # True (5.0は整数と見なせる)
print(num2 == int(num2)) # False (5.5は整数ではない)
この方法は直感的ですが、浮動小数点数の丸め誤差によって、稀に意図しない結果になる可能性があります。例えば、3.0000000000000001のような値はint()で3に変換されますが、厳密には3.0とは異なるため、比較結果がFalseになることがあります。
2. float.is_integer()メソッドを使う(推奨)
float型には、その値が整数と同じであるかどうかを判定するための便利なメソッド**is_integer()**が用意されています。これが最も推奨される方法です。
# float.is_integer()を使った判定
num1 = 5.0
num2 = 5.5
num3 = 3.0000000000000001 # 浮動小数点数の内部表現による誤差の例
print(num1.is_integer()) # True
print(num2.is_integer()) # False
print(num3.is_integer()) # False (誤差があってもFalse)
is_integer()メソッドは、浮動小数点数の内部表現を考慮して正確に判定してくれるため、丸め誤差による問題を回避できます。
3. 剰余演算子(%)とmath.isclose()を使う
数値が整数であれば、1で割った余りは0になるはずです。しかし、浮動小数点数の誤差を考慮して、直接num % 1 == 0とするのではなく、math.isclose()を使って誤差を許容した比較を行います。
import math
# 剰余演算子とmath.isclose()を使った判定
num1 = 5.0
num2 = 5.5
num3 = 3.0000000000000001
print(math.isclose(num1 % 1, 0)) # True
print(math.isclose(num2 % 1, 0)) # False
print(math.isclose(num3 % 1, 0)) # False
この方法も有効ですが、is_integer()メソッドの方がより簡潔で直感的です。
まとめ
Pythonで数値が整数か小数かを判定する際は、以下の点を考慮して適切な方法を選びましょう。
厳密に型を判定したい場合(
int型かfloat型か):isinstance(value, int)またはisinstance(value, float)を使用します。float型だが、値が「実質的に整数」であるかを判定したい場合:float.is_integer()メソッドを使用するのが最も安全で推奨される方法です。
これらのテクニックを使いこなすことで、Pythonでの数値処理をより正確かつ柔軟に行うことができます。
■プロンプトだけでオリジナルアプリを開発・公開してみた!!
■AI時代の第一歩!「AI駆動開発コース」はじめました!
テックジム東京本校で先行開始。
■テックジム東京本校
「武田塾」のプログラミング版といえば「テックジム」。
講義動画なし、教科書なし。「進捗管理とコーチング」で効率学習。
より早く、より安く、しかも対面型のプログラミングスクールです。
<短期講習>5日で5万円の「Pythonミニキャンプ」開催中。
<月1開催>放送作家による映像ディレクター養成講座
<オンライン無料>ゼロから始めるPython爆速講座



