整数と浮動小数点数を使いこなす
Pythonでプログラミングを始めるにあたり、整数(5
や10
)と浮動小数点数(3.14
や2.7
)は最初に学ぶ重要なデータ型です。これらの基本的な演算子のルールや特徴を知っておくことで、今後のプログラミングをスムーズに進めることができます。本記事では、整数と浮動小数点数の基本を押さえつつ、よく使われる演算や注意点、型変換などを初心者にもわかりやすく解説します。
1. Pythonにおける整数と浮動小数点数の基本
Pythonでは、整数をint型、浮動小数点数をfloat型として扱います。以下のように、整数リテラルと浮動小数点数リテラルをコードに直接記述することが可能です。
x = 5 # 整数(int)
y = 10 # 整数(int)
a = 3.14 # 浮動小数点数(float)
b = 2.7 # 浮動小数点数(float)
ここでint
型は、いわゆる小数部分を含まない「整数値」を表します。一方のfloat
型は小数部分を持つ値を取り扱うことができ、厳密に言うと「浮動小数点形式」で表現される数値です。
Pythonでは、バージョン3以降「int型の最大値」の概念がなくなり、メモリが許す限り非常に大きな整数を扱えます。一方でfloat
型はIEEE754に基づいた倍精度浮動小数点数が一般的に使われるため、有効桁数には限界があります。大きすぎるまたは小さすぎる値を扱うと、オーバーフローやアンダーフローなどで誤差が発生することがある点にも注意が必要です。
2. 基本的な演算子のルール
Pythonでよく使われる算術演算子には以下のようなものがあります。
+
加算-
減算*
乗算/
除算(浮動小数点数で結果を返す)//
整数除算(商の小数点以下を切り捨て)%
剰余(余りを求める)**
べき乗(累乗)
例えば、整数同士の演算は以下のように扱えます。
x = 10
y = 3
print(x + y) # 結果: 13
print(x - y) # 結果: 7
print(x * y) # 結果: 30
print(x / y) # 結果: 3.3333333333 (floatで返される)
print(x // y) # 結果: 3 (整数除算)
print(x % y) # 結果: 1 (余り)
print(x ** y) # 結果: 1000 (10の3乗)
注意すべきは/
演算子です。Python 2系では整数同士の除算は整数が返されていましたが、Python 3系では整数同士を割り算しても結果はfloat
型(浮動小数点数)として返ります。整数の商のみが欲しい場合は、//
(整数除算)を使用するとよいでしょう。
また、整数と浮動小数点数が混在する演算では、自動的に浮動小数点数に変換されます。以下のコードを見てみましょう。
x = 5 # int
y = 2.5 # float
result = x + y # int + float → float
print(result) # 7.5 と表示される
print(type(result)) #
このように、Pythonは計算過程でどの型を優先するかを暗黙的に決めており、intとfloatが混ざるとfloatに寄せるという挙動をします。これにより、意図せず小数を含む結果になったりすることがあるため注意しましょう。
3. 浮動小数点数の丸め誤差とその対処
float
型は実数を正確に表現できるわけではなく、内部では2進数で近似的に値を保持しています。このため、以下のように一見単純な計算でも誤差が生じることがあります。
a = 0.1
b = 0.2
print(a + b) # 0.30000000000000004 と表示される可能性がある
この誤差は浮動小数点の仕様上避けられないものであり、特に通貨計算や精密さが要求される場面では大きな問題を引き起こす可能性があります。もし誤差が問題になる場合は、decimal
モジュールを利用することで小数をより正確に扱うことができます。あるいは分数を扱うfractions
モジュールを使用する方法もあります。
from decimal import Decimal
a = Decimal("0.1")
b = Decimal("0.2")
print(a + b) # 0.3 と表示される
ただしdecimal
を使うと速度は少し低下する可能性があります。実際の用途や必要な精度に応じてモジュールを使い分けるとよいでしょう。
4. 型変換(キャスト)
整数と浮動小数点数を相互に変換したい場合は、以下のようにキャストを行います。
x = 5
y = 3.14
float_x = float(x) # int → float, 結果は 5.0
int_y = int(y) # float → int, 小数点以下が切り捨てられる(3になる)
int()
で浮動小数点数から整数へ変換するときは、小数点以下が切り捨てられるので注意が必要です。例えば3.99
をint(3.99)
とすると3
になり、四捨五入にはなりません。小数を丸めたいときはround()
関数を利用することも検討しましょう。
5. 演算子の優先順位と複合演算
Pythonでも他の言語同様、演算子には優先順位があります。*
や/
は+
や-
よりも先に評価されるため、複雑な式を書くときは意図通りに計算されているか注意しましょう。必要に応じて括弧()
を使って計算の順序を明示すると可読性が上がります。
また、+=
や*=
などの複合演算子も使用可能で、次のように書くことができます。
x = 5
x += 10 # x = x + 10 と同じ
print(x) # 15
y = 2.5
y *= 4 # y = y * 4 と同じ
print(y) # 10.0
これらの複合演算子はコードをコンパクトにし、値を更新する処理を分かりやすく記述できるため、よく利用される書き方です。
6. 実践例: 整数と浮動小数点数を混在させた計算
最後に、整数と浮動小数点数を組み合わせた少し実践的な例を見てみましょう。たとえば、ある商品の税込価格を計算する場合です。税率は10%とし、商品価格は整数で持ちながら小数点を含む計算で税込み金額を求めることがあるでしょう。
price = 500 # 商品価格(整数)
tax_rate = 0.1 # 消費税率(浮動小数点数)
price_with_tax = price * (1 + tax_rate)
print(price_with_tax) # 550.0
このように、演算の途中でint
とfloat
が混在する場合でも、Pythonは自動的に浮動小数点数の計算に切り替えてくれます。表示された値が550.0
となるように、小数点以下が必要に応じて付加されることに注意してください。
まとめ
整数と浮動小数点数は、Pythonでもっとも基本的かつ重要なデータ型の一つです。整数(int
)は桁数に制限がほとんどなく、浮動小数点数(float
)は小数を扱える一方で内部的な誤差がある点に注意が必要です。演算子の使い方や型変換のルールを正しく理解しておくと、計算結果を混乱なく扱うことができます。
今回紹介したように、/
や//
などの除算の違い、float
型の丸め誤差、整数との混在時の型変換などは、初心者がつまずきやすいポイントでもあります。これらをしっかり理解しておけば、より正確に数値を操作できるでしょう。また、精度の高い計算が必要な場合はdecimal
モジュールなどの利用も検討してみてください。
今後、さらに高度な数値計算が必要となったときにはmath
やdecimal
、fractions
といった標準ライブラリ、さらにはnumpy
などの科学技術計算ライブラリを組み合わせることで、大規模かつ高精度な数値処理が可能になります。まずは本記事の内容を活用し、基本的な整数と浮動小数点数の扱いをしっかりとマスターしておきましょう。