Python, math.modfで数値の整数部と小数部を同時に取得

Pythonの数学関数の標準モジュールmathのmodf()関数を使うと、数値の整数部と小数部を同時に取得することができます。

9.2. math.modf(x) — 数学関数 — Python 3.6.4 ドキュメント

割り算の整数の商と余りを同時に取得するdivmod()については

mathモジュールを使わずに整数部と小数部を取得

浮動小数点float型に対して組み込み関数int()を適用すると、小数点以下を切り捨てた整数値が得られます。 これを使って、整数部と小数部を取得することができます。

a = 1.5

i = int(a)
f = a - int(a)

print(i)
print(f)
# 1
# 0.5

print(type(i))
print(type(f))
# <class 'int'>
# <class 'float'>

math.modf()で数値の整数部と小数部を同時に取得

mathモジュールの関数modf()で数値の整数部と小数部を同時に取得することができます。 math.modf()は(小数部, 整数部)のタプルを返します。小数部が先なので順番に気をつけてください。

import math

print(math.modf(1.5))
print(type(math.modf(1.5)))
# (0.5, 1.0)
# <class 'tuple'>

以下のようにそれぞれをアンパックして別々の変数に代入することもできます。整数部もfloat型。

f, i = math.modf(1.5)

print(i)
print(f)
# 1.0
# 0.5

print(type(i))
print(type(f))
# <class 'float'>
# <class 'float'>

符号は整数部、小数部どちらも元の値の符号と同じ。

f, i = math.modf(-1.5)

print(i)
print(f)
# -1.0
# -0.5

int型に対しても適用できます。

f, i = math.modf(100)

print(i)
print(f)
# 100.0
# 0.0

なお、float型が整数(小数部が0)かどうかは小数部を取得しなくても、float型のメソッドfloat.is_integer()で確認することができます。

Last Updated: 6/26/2019, 10:34:03 PM