数値型の概要(int と float)
Pythonの数値型には、主に整数を表す int と、小数を表す float があります。int は桁数の制限がなく、非常に大きな数でも桁あふれせずに扱えます。float は「浮動小数点数」で、一般的に 64-bit(倍精度)の近似値として計算されるため、非常に広い範囲を扱える一方で、厳密な小数を完全に表現できない場合があります。用途としては、個数やインデックスなど「割り切れる量」は int、価格の割引率や身長のように「連続的で小数があり得る量」は float を使うのが基本です。
apples = 3 # int(整数)
height = 175.5 # float(小数)
Python整数型 int の基本と実用ポイント
桁数無制限と可読性のためのアンダースコア
Pythonの int は桁数が事実上無制限です。大きな数も安全に扱えます。可読性の向上のため、数値リテラルにアンダースコア(_)を入れて桁区切りできます。計算結果はアンダースコアなしの純粋な数です。
big = 1_000_000_000_000
print(big) # 1000000000000
Python基本演算と整数除算の注意
足し算、引き算、掛け算、冪乗(**)は直感的に使えます。割り算(/)は常に float を返します。整数の「切り捨て」結果が欲しいときは //(床関数的な除算)を使います。
a = 7
print(a / 2) # 3.5(float)
print(a // 2) # 3 (整数の切り捨て)
print(a ** 3) # 343
Python負の数での // は「0方向の切り捨て」ではなく「より小さい整数へ丸め」(床)になる点に注意してください。
print(-7 // 2) # -4(-3.5 より小さい側へ)
Python浮動小数点型 float の基本と深掘り
表現の仕組みと丸め誤差
float は2進数の近似で小数を表すため、10進の「ぴったりの小数」を表現できないことがあります。計算の途中にわずかな誤差が入り、比較や表示で「あれ?」となるのは正常な挙動です。
x = 0.1 + 0.2
print(x) # 0.30000000000000004 のような表示になることがある
Python厳密な金額計算が必要なら decimal.Decimal を使います。float を使う場合は「許容誤差」を決めて比較するのが安全です。
# 許容誤差で比較
EPS = 1e-9
y = 0.3
print(abs(x - y) < EPS) # True(十分近い)
Python指数表記と特殊値
非常に大きい・小さい値は指数表記が使えます。また、ゼロ除算やオーバーフローに関連して、inf(無限大)や NaN(数でない)を扱う場面があります。
mass = 1.23e6 # 1,230,000.0
tiny = 5.0e-7 # 0.0000005
pos_inf = float('inf')
not_a_number = float('nan')
PythonNaN は比較に特異な性質があり、NaN == NaN が False になることに注意してください。
数値演算の基本と使いどころ
四則演算と剰余・冪乗
加減乗除は直感どおりに使えます。% は剰余(余り)を返します。負数の剰余は「除数と同じ符号」で返る言語が多いですが、Pythonの定義では商と余りの関係が保たれるように設計されており、期待と違うと感じる場合があります。冪乗は ** を使い、平方根などは math.sqrt を利用します。
print(10 % 3) # 1
print(-10 % 3) # 2(商が -4、余り 2 で -10 = (-4)*3 + 2 を満たす)
import math
print(3 ** 0.5) # 1.732...
print(math.sqrt(3)) # 1.732...
Python代入演算子と丸め
加算代入(+=)などの複合代入は読みやすく、ループ内の集計でよく使います。round は「銀行丸め」(偶数丸め)を採用しているため、.5 の丸めで期待と違う値になることがあります。
total = 0
for p in [120.0, 340.0, 560.0]:
total += p
print(total) # 1020.0
print(round(2.5)) # 2(偶数に丸め)
print(round(3.5)) # 4
print(round(1.25, 1)) # 1.2
Python型変換と表示のコントロール
int と float の相互変換
float を int に変換すると「0方向への切り捨て」になります。数学の床・天井が欲しい場合は math.floor / math.ceil を使います。
print(int(3.9)) # 3
print(int(-3.9)) # -3(0方向)
import math
print(math.floor(-3.1)) # -4(床)
print(math.ceil(-3.1)) # -3(天井)
Pythonフォーマット指定で見た目を整える
表示を整えたいときはフォーマットを使います。小数点以下桁数の指定、桁区切りなどが可能です。
amount = 12345.6789
print(f"{amount:.2f}") # 12345.68(小数2桁)
print(f"{amount:,.2f}") # 12,345.68(カンマ区切り)
Python例題で身につける(現場で役立つパターン)
例題1:税込計算で丸めをコントロールする
税額を計算し、業務仕様に合わせて丸め方を固定します。四捨五入と切り捨てを切り替え可能にします。
import math
def calc_total(amount: float, rate: float = 0.1, mode: str = "round") -> int:
tax = amount * rate
if mode == "round":
tax_int = round(tax) # 偶数丸め
elif mode == "floor":
tax_int = math.floor(tax) # 切り捨て
else:
raise ValueError("mode は 'round' か 'floor'")
return int(amount) + tax_int
print(calc_total(1000.0)) # 1100
print(calc_total(1000.0, 0.08, "floor")) # 1080
Python例題2:安全な浮動小数比較(許容誤差付き)
測定値や比率の比較では、誤差を見越して判定します。
def almost_equal(a: float, b: float, eps: float = 1e-9) -> bool:
return abs(a - b) < eps
print(almost_equal(0.1 + 0.2, 0.3)) # True
Python例題3:平均値の計算で型が混ざるケース
int と float が混在した入力でも、Pythonは適切に型を昇格させて平均を計算できます。
values = [10, 20, 30.0] # int と float が混在
avg = sum(values) / len(values)
print(avg) # 20.0(float)
Python例題4:指数表記を使ったスケールの扱い
非常に大きい・小さい量を扱うとき、指数表記で読み書きの負担を減らします。
distance_m = 1.5e11 # 1.5 × 10^11
time_s = 3.6e3 # 3600
speed = distance_m / time_s
print(speed) # 4.166...e7
Pythonまとめと次の一歩
int は桁数無制限で正確、float は広い範囲を近似で扱う反面、丸め誤差が前提です。割り算の型、// の床方向、負数の剰余の定義、round の偶数丸め、int() の 0 方向切り捨てなど、挙動の「クセ」を押さえると実務での混乱が激減します。金額など厳密さが最優先なら decimal を検討し、float の比較では許容誤差を導入しましょう。
