Pythonで数値の整数部と小数部を同時に抽出するmath.modf()
Pythonで浮動小数点数を扱う際、その数値から整数部分と小数部分を別々に取り出したい場合があります。例えば、時間の計算で「〇時間〇分」と表示したり、数値データの分析で整数的な特徴と小数的な特徴を分離したりする際に役立ちます。Pythonの**mathモジュールには、この処理を効率的に行えるmath.modf()関数**が用意されています。この記事では、math.modf()の基本的な使い方と、その挙動、そして活用例について詳しく解説します。
🧩 math.modf()関数とは?
math.modf(x)関数は、与えられた浮動小数点数xの小数部と整数部を、2つのfloat値のタプルとして同時に返す関数です。
戻り値の形式は常に(小数部, 整数部)となります。
import math
# math.modf()の基本的な使い方
result = math.modf(3.14)
print(result) # (0.14000000000000012, 3.0)
# タプル unpacking で個別に取得
fractional_part, integral_part = math.modf(3.14)
print(f"整数部: {integral_part}, 小数部: {fractional_part}")
# 整数部: 3.0, 小数部: 0.14000000000000012
戻り値の型と精度に関する注意点
math.modf()が返す小数部と整数部は、どちらも**float型**です。また、浮動小数点数の性質上、小数部が厳密な値にならない場合があります(例: 0.14000000000000012)。これは浮動小数点数の精度限界によるもので、math.modf()に限らず浮動小数点数の計算全般に言えることです。
➖ 負の数でのmath.modf()の挙動
math.modf()は負の数に対しても正しく動作します。この場合、小数部と整数部ともに、元の数値と同じ符号を持ちます。
import math
# 負の数でのmath.modf()の例
frac_neg, int_neg = math.modf(-3.14)
print(f"整数部: {int_neg}, 小数部: {frac_neg}")
# 整数部: -3.0, 小数部: -0.14000000000000012
frac_neg2, int_neg2 = math.modf(-3.8)
print(f"整数部: {int_neg2}, 小数部: {frac_neg2}")
# 整数部: -3.0, 小数部: -0.8000000000000007
この挙動は、math.floor()やint()とは異なる点です。
-
int(-3.14)は-3(ゼロ方向へ丸める) -
math.floor(-3.14)は-4(与えられた数値以下の最大の整数)
一方、math.modf(-3.14)の整数部は-3.0であり、これは元の数値から小数部分を取り除いた最も近い整数となります。
💡 math.modf()の活用例
小数点以下の表示を制御する
例えば、数値の整数部と小数部を分けて、それぞれを異なる形式で表示したい場合に役立ちます。
import math
price = 123.45
# 整数部と小数部を取得
_, integer_part_float = math.modf(price)
integer_part = int(integer_part_float) # 整数部をint型に変換
fractional_part = int(price * 100) % 100 # 小数部を整数として取得 (例: 45)
print(f"{integer_part}ドルと{fractional_part}セント") # 123ドルと45セント
この例では、小数部を整数として表示するために少し加工しています。
数値の分解と分析
データ分析などで、数値の整数的な特性と小数的な特性を分離して分析したい場合にも利用できます。
import math
data_point = 7.65
# 整数部と小数部に分解
fraction, integer = math.modf(data_point)
print(f"元の数値: {data_point}")
print(f"整数部の分析: {int(integer)}") # 整数部を整数型で利用
print(f"小数部の分析: {round(fraction, 2)}") # 小数部を丸めて表示
まとめ
Pythonの**math.modf()関数は、浮動小数点数から整数部と小数部を同時に、かつ元の数値と同じ符号で抽出**できる便利な機能です。特に数値の表示形式を細かく制御したい場合や、数値データを異なる観点から分解して分析したい場合に役立ちます。浮動小数点数の精度に関する注意点を理解しつつ、この関数を効果的に活用しましょう。
■プロンプトだけでオリジナルアプリを開発・公開してみた!!
■AI時代の第一歩!「AI駆動開発コース」はじめました!
テックジム東京本校で先行開始。
■テックジム東京本校
「武田塾」のプログラミング版といえば「テックジム」。
講義動画なし、教科書なし。「進捗管理とコーチング」で効率学習。
より早く、より安く、しかも対面型のプログラミングスクールです。
<短期講習>5日で5万円の「Pythonミニキャンプ」開催中。
<月1開催>放送作家による映像ディレクター養成講座
<オンライン無料>ゼロから始めるPython爆速講座




