数値を扱おう:整数と小数の違い#

はじめに#

今回は、Pythonでの数値の扱い方について学んでいきます。

私たちが日常生活で使っている数値には、「1」や「42」のような整数と、「3.14」や「0.5」のような小数があります。Pythonでも同様に、これらの数値を扱うことができます。この記事では、数値データの種類や基本的な操作方法について解説します。

Pythonにおける数値の種類#

Pythonでは、主に以下の2種類の数値を扱います。

1. 整数(int型)#

整数は、小数点を含まない数値です。例えば、1, 42, -7, 0 などが整数になります。Pythonでは、これらを「int(integer)型」として扱います。

Google Colabで以下のコードを実行してみましょう。

>
# 整数の例
a = 10
b = -5
c = 0

# 変数の値と型を確認
print(a, "の型:", type(a))
print(b, "の型:", type(b))
print(c, "の型:", type(c))

実行結果:

10 の型: <class 'int'>
-5 の型: <class 'int'>
0 の型: <class 'int'>

type()関数は、変数のデータ型を調べるための関数です。すべての結果が<class 'int'>となっており、これらの変数が整数型であることが確認できます。

2. 浮動小数点数(float型)#

小数点を含む数値は、「float(浮動小数点数)型」として扱われます。例えば、3.14, -0.5, 2.0 などです。

以下のコードを実行してみましょう。

>
# 浮動小数点数の例
x = 3.14
y = -0.5
z = 2.0  # 整数のように見えますが、小数点があるのでfloat型です

# 変数の値と型を確認
print(x, "の型:", type(x))
print(y, "の型:", type(y))
print(z, "の型:", type(z))

実行結果:

3.14 の型: <class 'float'>
-0.5 の型: <class 'float'>
2.0 の型: <class 'float'>

注目すべき点は、z = 2.0のケースです。値は整数の2と同じですが、小数点があるため、floatとして扱われています。

数値の演算#

Pythonでは、基本的な四則演算(足し算、引き算、掛け算、割り算)はもちろん、その他の便利な演算も行うことができます。

基本的な四則演算#

>
# 四則演算の例
a = 10
b = 3

# 足し算
print(a, "+", b, "=", a + b)

# 引き算
print(a, "-", b, "=", a - b)

# 掛け算
print(a, "*", b, "=", a * b)

# 割り算
print(a, "/", b, "=", a / b)

実行結果:

10 + 3 = 13
10 - 3 = 7
10 * 3 = 30
10 / 3 = 3.3333333333333335

特に注目したいのは割り算の結果です。10 / 3の結果は3.3333333333333335と、小数点以下が長く続いています。Pythonでは、割り算を行うと結果は常に浮動小数点数(float型)になります。

その他の演算#

基本的な四則演算以外にも、Pythonには便利な演算子があります。

>
a = 10
b = 3

# 切り捨て除算(結果は整数)
print(a, "//", b, "=", a // b)

# 余りを求める(モジュロ演算)
print(a, "%", b, "=", a % b)

# 累乗(aのb乗)
print(a, "**", b, "=", a ** b)

実行結果:

10 // 3 = 3
10 % 3 = 1
10 ** 3 = 1000
  • //演算子:割り算の結果を整数部分だけにします(小数点以下を切り捨て)
  • %演算子:割り算の余りを求めます(モジュロ演算)
  • **演算子:累乗(べき乗)を計算します

整数と浮動小数点数の混合演算#

整数と浮動小数点数を組み合わせた演算も可能です。この場合、結果は浮動小数点数になります。

>
# 整数と浮動小数点数の混合演算
a = 10    # 整数
b = 3.5   # 浮動小数点数

# 足し算
print(a, "+", b, "=", a + b)

# 引き算
print(a, "-", b, "=", a - b)

# 掛け算
print(a, "*", b, "=", a * b)

# 割り算
print(a, "/", b, "=", a / b)

実行結果:

10 + 3.5 = 13.5
10 - 3.5 = 6.5
10 * 3.5 = 35.0
10 / 3.5 = 2.857142857142857

すべての結果が浮動小数点数になっているのがわかります。Pythonでは、整数と浮動小数点数の演算を行うと、結果は自動的に浮動小数点数になるというルールがあります。

数値の精度と表現#

浮動小数点数は、必ずしも正確に表現できるわけではありません。例えば、以下のコードを実行してみましょう。

>
# 浮動小数点数の精度の例
a = 0.1 + 0.2
print("0.1 + 0.2 =", a)
print("0.1 + 0.2 == 0.3 の結果:", a == 0.3)

実行結果:

0.1 + 0.2 = 0.30000000000000004
0.1 + 0.2 == 0.3 の結果: False

0.1 + 0.2の結果が厳密に0.3ではなく、0.30000000000000004になっているのがわかります。これは、コンピュータが浮動小数点数を2進数で表現するために起こる誤差です。Pythonだけでなく、ほとんどのプログラミング言語で見られる避けることのできない現象です。

このような誤差があるため、浮動小数点数の比較は注意が必要です。完全に等しいかどうかを比較するのではなく、誤差の許容範囲内かどうかを確認する方法がよく使われます。

>
# 浮動小数点数の比較(誤差を考慮した方法)
a = 0.1 + 0.2
b = 0.3

# 差の絶対値が非常に小さければ「等しい」と判断
print("差の絶対値:", abs(a - b))
print("十分に近いと判断できるか:", abs(a - b) < 0.0000001)

実行結果:

差の絶対値: 5.551115123125783e-17
十分に近いと判断できるか: True

abs()は絶対値を求める関数です。5.551115123125783e-17という表記は、「5.551115123125783 × 10-17」を意味し、非常に小さな値であることがわかります。この差はとても小さいため、実用上は0.1 + 0.20.3は等しいと見なすことができます。

型の変換#

整数と浮動小数点数の間で変換が必要な場合があります。Pythonでは以下の関数を使って型変換を行うことができます。

>
# 整数から浮動小数点数への変換
a = 10
a_float = float(a)
print(a, "を浮動小数点数に変換:", a_float)
print("型:", type(a_float))

# 浮動小数点数から整数への変換(小数点以下は切り捨て)
b = 3.7
b_int = int(b)
print(b, "を整数に変換:", b_int)
print("型:", type(b_int))

実行結果:

10 を浮動小数点数に変換: 10.0
型: <class 'float'>
3.7 を整数に変換: 3
型: <class 'int'>
  • float()関数:整数を浮動小数点数に変換します
  • int()関数:浮動小数点数を整数に変換します(小数点以下は単純に切り捨て)

まとめ#

この記事では、Pythonでの数値の扱い方について学びました。

  • Pythonには、整数(int型)と浮動小数点数(float型)の2種類の数値がある
  • 基本的な四則演算(+, -, *, /)に加え、切り捨て除算(//)、余り(%)、累乗(**)などの演算子がある
  • 浮動小数点数は常に正確とは限らないため、比較には注意が必要
  • 整数と浮動小数点数の間で型変換ができる(int(), float()

プログラミングでは、数値の計算がとても重要です。基本的な操作を理解しておくことで、様々なプログラムを作ることができるようになります。