Python | 文法の基本:数値型(int, float)

Python
スポンサーリンク

数値型の概要(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')
Python

NaN は比較に特異な性質があり、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 の比較では許容誤差を導入しましょう。

タイトルとURLをコピーしました