閉じる

Pythonの整数(int)と小数(float)の計算方法をやさしく解説

プログラムで数を扱うとき、整数(int)と小数(float)は見た目が似ていても計算の性質が異なります。

本記事では、Pythonにおけるintとfloatの基本、四則演算、混在計算や型変換、浮動小数点の誤差対策までを段階的に解説します。

初心者の方でも安心して読み進められるよう、サンプルコードと出力を併記します。

Pythonの整数(int)と小数(float)の基礎

intとfloatの違いと使い分け

int(整数)の特徴

intは小数点を持たない数です。

Pythonのintは任意精度なので、メモリが許す限り非常に大きな整数まで扱えます。

数え上げやインデックス、個数の計算など離散的な数量に使います。

float(小数)の特徴

floatは実数を近似表現するための数で、64ビットの倍精度(IEEE 754)を採用しています。

測定値や割合、平均など連続量に使います。

内部表現の都合で0.1や0.2といった一部の小数は正確に表せません

使い分けの指針

  • 個数や回数、インデックスはint
  • 実数計算や割合、平均はfloat
  • 金額など誤差が許されない用途はDecimalを検討します(後述)。

次のスニペットで型の違いを確認できます。

Python
# 整数と小数の型を確認する例
a = 42         # int
b = 3.14       # float
print(a, type(a))
print(b, type(b))
実行結果
42 <class 'int'>
3.14 <class 'float'>

計算で使う数値リテラルの書き方

整数リテラルの基本

整数は通常の数字で表します。

大きな数は_(アンダースコア)で桁区切りができます。

2進数0b、8進数0o、16進数0xも扱えます。

Python
n1 = 1000000
n2 = 1_000_000          # 桁区切り(可読性向上)
n_bin = 0b1010          # 2進数(10)
n_oct = 0o12            # 8進数(10)
n_hex = 0xA             # 16進数(10)

print(n1 == n2, n_bin, n_oct, n_hex)
実行結果
True 10 10 10

小数リテラルと指数表記

小数は3.0のように書きます。

指数表記1.23e31230.0を意味します。

Python
x = 0.5
y = 1.23e3   # 1.23 × 10^3 = 1230.0
z = 4e-2     # 4 × 10^-2 = 0.04
print(x, y, z, type(y))
実行結果
0.5 1230.0 0.04 <class 'float'>

演算の優先順位と括弧の使い方

演算は優先順位に従って評価されます。

迷ったら括弧で意図を明確にします。

主な演算子の優先順位(高→低)は次の通りです。

演算子説明
**累乗
+x, -x符号
*, /, //, %乗除、床除算、剰余
+, -加減
Python
# 優先順位の例
expr1 = 1 + 2 * 3 ** 2       # ** が最優先、次に *、最後に +
expr2 = (1 + 2) * (3 ** 2)   # 括弧で明示
print(expr1, expr2)
実行結果
19 27

Pythonの四則演算と基本の演算子

足し算と引き算(+と-)

基本の例

Python
a = 10
b = 3
c = 2.5
print(a + b)     # 13
print(a - b)     # 7
print(a + c)     # int と float の混在 → float
実行結果
13
7
12.5

符号の扱い

Python
print(-5 + 2)    # -3
print(5 + -2)    # 3
実行結果
-3
3

掛け算(*)と累乗(**)

掛け算の基本

Python
print(6 * 7)      # 42
print(2 * 0.5)    # 1.0 (floatを含むのでfloat)
実行結果
42
1.0

累乗の例

Python
print(2 ** 3)     # 8
print(9 ** 0.5)   # 平方根(3.0)
実行結果
8
3.0

割り算(/)の結果はfloatになる

Pythonの/は常にfloatを返します(整数同士でも結果はfloat)。

Python
print(7 / 2, type(7 / 2))   # 3.5, float
print(8 / 4, type(8 / 4))   # 2.0, float
実行結果
3.5 <class 'float'>
2.0 <class 'float'>

整数割り算を切り捨てたい場合は//(床除算)を使います

負数では0方向ではなく負の無限大方向に切り下げる点に注意します。

Python
print(7 // 2)     # 3  (切り捨て)
print(-7 // 2)    # -4 (負の無限大方向に床)
print(int(7 / 2)) # 3  (小数をintに変換 → 0方向に切り捨てではないので注意: 実際は小数点以下切り捨て)
実行結果
3
-4
3

補足: int(x)小数点以下を切り捨て(0方向)ます。

-3.5-3になりますが、-7 // 2-4です。

余りを求める(%)

%は剰余を返します。

符号の規則はa == (a // b) * b + (a % b)を満たすように定義されます。

Python
print(7 % 3)      # 1
print(-7 % 3)     # 2  (3 * -3 + 2 = -7)
print(7 % -3)     # -2 (-3 * -3 + -2 = 7)
実行結果
1
2
-2

演算子の組み合わせと優先順位

複数の演算子を混ぜるときは優先順位と左結合(一部を除く)に従います。

意図を明確にするため、括弧でグループ化しましょう。

Python
print(1 + 2 * 3 - 4 / 2)          # 1 + 6 - 2 = 5.0
print((1 + 2) * (3 - 4) / 2)      # 3 * -1 / 2 = -1.5
print(2 ** 3 ** 2)                # 2 ** (3 ** 2) = 512 (** は右結合)
実行結果
5.0
-1.5
512

intとfloatの混在計算と型変換

混在計算の結果型はfloatになる

intとfloatを一緒に計算すると結果はfloatになります

これは情報を失わないための自動型変換です。

Python
x = 10
y = 3.0
z = x + y
print(z, type(z))
実行結果
13.0 <class 'float'>

明示的な型変換(floatとint)

型をはっきり揃えたいときは明示的に変換します。

Python
a = 7
b = 2

print(float(a) / b)  # 3.5  明示的にfloat化
print(int(3.9))      # 3    小数点以下切り捨て(0方向)
print(float("2.5"))  # 2.5  文字列 → float
実行結果
3.5
3
2.5

小数点以下を切り捨てるときの注意点

切り捨てには複数の方法があり、負数の扱いが異なるため注意が必要です。

Python
import math

print(int(3.9), int(-3.9))   # 3, -3 (0方向に切り捨て)
print(math.floor(3.9), math.floor(-3.9))  # 3, -4 (床: 負の無限大方向)
print(7 // 2, -7 // 2)       # 3, -4 (床除算)
実行結果
3 -3
3 -4
3 -4

状況に応じてintmath.floor//を使い分けると安全です。

入力値の型を確認する(type)

デバッグ時はtypeで型を確認します。

混在計算や型変換の結果が意図通りかを確かめましょう。

Python
value = 10 / 4
print(value, type(value))
print(isinstance(value, float))  # True かどうか
実行結果
2.5 <class 'float'>
True

floatの誤差と丸めの実践

浮動小数点の誤差を知る

0.1や0.2は二進数で有限桁にならないため、内部表現にわずかな誤差が出ます。

そのため0.1 + 0.2 は 0.3 と厳密には等しくありません

Python
x = 0.1 + 0.2
print(x)
print(x == 0.3)
実行結果
0.30000000000000004
False

比較が必要なときは、abs(a - b) < 許容誤差のように許容範囲で判断します。

Python
a = 0.1 + 0.2
b = 0.3
eps = 1e-9
print(abs(a - b) < eps)  # 許容誤差内ならTrue
実行結果
True

roundで桁数を指定して丸める

round(x, ndigits)で丸められます。

Pythonのround銀行丸め(偶数丸め)です。

Python
print(round(1.2345, 2))  # 1.23
print(round(2.675, 2))   # 2.67 (2.68ではない → 代表例)
print(round(2.5), round(3.5))  # 2, 4 (偶数丸め)
実行結果
1.23
2.67
2 4

表示だけ整えたいなら内部値を変えずにフォーマットする方法もあります(後述)。

Decimalを使った正確な小数計算

金額など誤差が許されない場合はdecimal.Decimalを使います。

文字列から生成すると安全です。

Python
from decimal import Decimal, ROUND_HALF_UP

price = Decimal("0.1") + Decimal("0.2")
print(price)                    # 0.3 (正確)

# 2桁に四捨五入(一般的な四捨五入)
x = Decimal("2.675")
y = x.quantize(Decimal("0.01"), rounding=ROUND_HALF_UP)
print(y)                        # 2.68
実行結果
0.3
2.68

注意: Decimal(0.1)のようにfloatから直接作ると誤差を持ち込みます。

必ず"0.1"のような文字列を使いましょう。

表示フォーマットで桁を整える(format)

表示の体裁だけ整えるならformatf-stringを使います。

内部の値は変えずに見た目だけ整うので、集計前の丸めとは区別します。

Python
value = 1234.56789

# 小数点以下2桁
print(f"{value:.2f}")             # 1234.57

# 3桁区切りのカンマ
print(f"{value:,.2f}")            # 1,234.57

# パーセント表示(自動で100倍して%)
rate = 0.035
print(f"{rate:.1%}")              # 3.5%

# format関数でも同様
print(format(value, ".3f"))       # 1234.568
実行結果
1234.57
1,234.57
3.5%
1234.568

表示丸めと計算丸めは目的が異なります

集計や請求額の算出はDecimalで丸め、表示はフォーマットで整えるなど、役割を分けましょう。

まとめ

本記事では、Pythonの整数(int)と小数(float)の基本、四則演算、混在計算と型変換、浮動小数点の誤差と丸めまでを一通り解説しました。

割り算/は常にfloatを返すこと、整数割りは//で行うこと、負数の切り捨てが方法によって異なることを押さえておくと、思わぬバグを避けられます。

さらに、0.1 + 0.2 ≠ 0.3といった誤差の本質を理解し、用途に応じてroundDecimal、表示フォーマットを使い分けるのが実践的です。

まずは小さなスクリプトで動作を確かめ、型と結果が想定通りかをtypeや出力で確認する習慣を身につけてください。

この記事を書いた人
エーテリア編集部
エーテリア編集部

人気のPythonを初めて学ぶ方向けに、文法の基本から小さな自動化まで、実際に手を動かして理解できる記事を書いています。

クラウドSSLサイトシールは安心の証です。

URLをコピーしました!