この内容は古いバージョンです。最新バージョンを表示するには、戻るボタンを押してください。
バージョン:4
ページ更新者:guest
更新日時:2026-06-11 07:10:02

タイトル: 数値を扱う組み込み関数(int / float / abs / round / min / max / sum / divmod など)
SEOタイトル: Python 数値系組み込み関数まとめ(int / round / divmod / pow / Decimal / Fraction まで)

この記事の要点
  • 型変換: int() / float() / complex()
  • 計算: abs() / round() / pow() / divmod()
  • 集約: sum() / min() / max()
  • 進数表記: bin() / oct() / hex()
  • 正確な計算には decimal.Decimal / fractions.Fraction

型変換系

# int(): 整数化
int('42')                # 42
int('1010', 2)           # 10 — 2 進数として解釈
int('ff', 16)            # 255 — 16 進数
int(3.7)                 # 3 — 切り捨て(負方向ではなく 0 方向)
int(-3.7)                # -3 — 同じく 0 方向

# float(): 浮動小数化
float('3.14')            # 3.14
float('1e3')             # 1000.0
float('inf')             # inf
float('nan')             # nan

# complex(): 複素数
complex(2, 3)            # (2+3j)
complex('1+2j')          # (1+2j)

絶対値・丸め

abs(-5)                  # 5
abs(-3.14)               # 3.14
abs(3 + 4j)              # 5.0 — 複素数の絶対値

# round()
round(3.7)               # 4
round(3.5)               # 4 — 偶数丸め(銀行家丸め)!
round(2.5)               # 2 — 同じく偶数側
round(3.14159, 2)        # 3.14 — 小数点以下 2 桁
round(1234, -2)          # 1200 — 100 の位で丸め

# 切り捨て / 切り上げ
import math
math.floor(3.7)          # 3
math.ceil(3.2)           # 4
math.trunc(3.7)          # 3 — 0 方向(int() と同じ)

round() の罠(偶数丸め)

Python 3 の round()銀行家丸め(Banker's rounding)。0.5 のとき偶数側に丸めるため、慣れた四捨五入と結果が違うことがあります:

round(0.5)               # 0 — ★期待: 1
round(1.5)               # 2
round(2.5)               # 2 — ★期待: 3
round(3.5)               # 4

# 教科書通りの四捨五入が欲しい場合
import math
def round_half_up(x, ndigits=0):
    p = 10 ** ndigits
    return math.floor(x * p + 0.5) / p

round_half_up(0.5)       # 1
round_half_up(2.5)       # 3

# または Decimal で
from decimal import Decimal, ROUND_HALF_UP
Decimal('2.5').quantize(Decimal('1'), rounding=ROUND_HALF_UP)
# Decimal('3')

累乗と商・剰余

# pow(): 累乗
pow(2, 10)               # 1024
2 ** 10                  # 1024 — 演算子も同じ
pow(2, 10, 1000)         # 24 — (2 ** 10) % 1000 ★モジュロ高速

# divmod(): 商と剰余を同時に
divmod(17, 5)            # (3, 2)
# 内訳: 17 // 5 == 3, 17 % 5 == 2

q, r = divmod(100, 7)
print(q, r)              # 14 2

# 時刻計算で便利
secs = 12345
h, rem = divmod(secs, 3600)
m, s = divmod(rem, 60)
print(f'{h}h {m}m {s}s')  # 3h 25m 45s

集約: min / max / sum

sum([1, 2, 3, 4])        # 10
sum([1, 2, 3], 100)      # 106 — 初期値指定

min(3, 1, 4, 1, 5)       # 1
max([3, 1, 4, 1, 5])     # 5

# key 関数指定
words = ['apple', 'banana', 'kiwi']
min(words, key=len)      # 'kiwi' — 長さ最小
max(words, key=len)      # 'banana' — 長さ最大

# default 指定(空でもエラー出さない)
min([], default=0)       # 0
# min([])               # ValueError

# 浮動小数の総和は誤差に注意 → math.fsum
import math
sum([0.1] * 10)          # 0.9999999999999999
math.fsum([0.1] * 10)    # 1.0 — 高精度

進数変換

bin(10)                  # '0b1010'
oct(10)                  # '0o12'
hex(255)                 # '0xff'

# プレフィックス除去
bin(10)[2:]              # '1010'
f'{10:b}'                # '1010' — f-string
f'{10:08b}'              # '00001010' — 0 埋め 8 桁
f'{255:x}'               # 'ff'
f'{255:X}'               # 'FF' — 大文字

# 文字列 → 整数(任意の基数)
int('1010', 2)           # 10
int('ff', 16)            # 255
int('0b1010', 0)         # 10 — プレフィックスから自動判定

正確な計算: Decimal と Fraction

金融計算など誤差を許容できない場面では float ではなく Decimal を使います:

# float は 2 進数なので 10 進小数を正確に表せない
0.1 + 0.2                # 0.30000000000000004

from decimal import Decimal, getcontext
Decimal('0.1') + Decimal('0.2')   # Decimal('0.3') — 正確

# 丸め
getcontext().prec = 10
Decimal(1) / Decimal(3)
# Decimal('0.3333333333')

# 分数
from fractions import Fraction
Fraction(1, 3) + Fraction(1, 6)
# Fraction(1, 2)

Fraction('0.1') + Fraction('0.2')
# Fraction(3, 10)        — 0.3 そのもの

数値系関数一覧表

関数用途備考
int(x[, base])整数化0 方向に切り捨て
float(x)浮動小数化'inf' / 'nan' 可
complex(r, i)複素数
abs(x)絶対値複素数なら大きさ
round(x, n)丸め★偶数丸め
pow(x, y[, m])累乗第 3 引数で剰余
divmod(a, b)(商, 余り)
min/max最小/最大key, default 指定可
sum総和初期値指定可
bin/oct/hex進数変換文字列を返す

FAQ

Q: round の偶数丸めを四捨五入に変えたい
A: math.floor(x + 0.5) または Decimal.quantize(rounding=ROUND_HALF_UP)

Q: int() で小数点付き文字列がエラー
A: int("3.14")ValueErrorint(float("3.14")) と 2 段階で。

Q: 浮動小数の合計に誤差が出る
A: math.fsum() で誤差を最小化、または Decimal。金額計算では絶対 Decimal を。