Python math.modf() 関数
数値計算において、時には数値の整数部と小数部を分離する必要があります。例えば、3.14 から 3 と 0.14 を抽出します。
math.modf()はこの操作を実行するための専用関数であり、数値の小数部分と整数部分。
単語の意味: modfは "modular fractional" の略で、「小数部分」という意味です。
基本構文とパラメータ
構文形式
import math math.modf(x)
パラメータの説明
- パラメータ:
x- 数値(整数または浮動小数点数)
戻り値
- タプルを返す
(fractional, integer) fractional: 小数部分。x と同じ符号integer: 整数部分(ゼロ方向に切り捨て)
例
例1:基本的な使い方
例
import math
result = math.modf(3.14159)
print("math.modf(3.14159) =", result)
fractional, integer = math.modf(3.14159)
print(f"小数部分: {fractional}, 整数部分: {integer}")
result = math.modf(3.14159)
print("math.modf(3.14159) =", result)
fractional, integer = math.modf(3.14159)
print(f"小数部分: {fractional}, 整数部分: {integer}")
実行結果:
math.modf(3.14159) = (0.14158999999999988, 3.0) 小数部分: 0.14158999999999988, 整数部分: 3.0
例2:負の数の処理
例
import math
print("math.modf(-3.14) =", math.modf(-3.14))
print("math.modf(-0.5) =", math.modf(-0.5))
fractional, integer = math.modf(-3.14)
print(f"小数部分: {fractional}, 整数部分: {integer}")
print("math.modf(-3.14) =", math.modf(-3.14))
print("math.modf(-0.5) =", math.modf(-0.5))
fractional, integer = math.modf(-3.14)
print(f"小数部分: {fractional}, 整数部分: {integer}")
実行結果:
math.modf(-3.14) = (-0.14000000000000012, -3.0) math.modf(-0.5) = (-0.5, -0.0) 小数部分: -0.14, 整数部分: -3.0
例3:整数の処理
例
import math
print("math.modf(5) =", math.modf(5))
print("math.modf(0) =", math.modf(0))
print("math.modf(-8) =", math.modf(-8))
print("math.modf(5) =", math.modf(5))
print("math.modf(0) =", math.modf(0))
print("math.modf(-8) =", math.modf(-8))
実行結果:
math.modf(5) = (0.0, 5.0) math.modf(0) = (0.0, 0.0) math.modf(-8) = (-0.0, -8.0)
例4:実際の応用 - 金額の分離
例
import math
# 金額を分離:元、角、分
price = 12.58
fractional, integer = math.modf(price)
yuan = int(integer)
jiao = int(fractional * 10)
fen = int((fractional * 10 - jiao) * 10)
print(f"価格 {price} 元 = {yuan} 元 {jiao} 角 {fen} 分")
# 時間変換:時間を時:分:秒に変換
hours = 73.5
fractional_hours, whole_hours = math.modf(hours)
total_minutes = fractional_hours * 60
fractional_minutes, whole_minutes = math.modf(total_minutes)
seconds = fractional_minutes * 60
print(f"{hours} 時間 = {int(whole_hours)} 時 {int(whole_minutes)} 分 {int(seconds)} 秒")
# 金額を分離:元、角、分
price = 12.58
fractional, integer = math.modf(price)
yuan = int(integer)
jiao = int(fractional * 10)
fen = int((fractional * 10 - jiao) * 10)
print(f"価格 {price} 元 = {yuan} 元 {jiao} 角 {fen} 分")
# 時間変換:時間を時:分:秒に変換
hours = 73.5
fractional_hours, whole_hours = math.modf(hours)
total_minutes = fractional_hours * 60
fractional_minutes, whole_minutes = math.modf(total_minutes)
seconds = fractional_minutes * 60
print(f"{hours} 時間 = {int(whole_hours)} 時 {int(whole_minutes)} 分 {int(seconds)} 秒")
実行結果:
价格 12.58 元 = 12 元 5 角 7 分 73.5 小时 = 73 时 30 分 0 秒
注意事項
- 返される整数部分は浮動小数点型であり、3 ではなく 3.0 など
- 整数部分は「ゼロ方向への切り捨て」(truncation)を採用しており、floor とは異なります
- 浮動小数点数には精度誤差があるため、結果にわずかなずれが生じることがあります
その他の拡張
Python math モジュール