Pythonでプログラミングをしていると、数値の型を変換する場面に頻繁に出会うでしょう。特に浮動小数点数(float)と整数(int)の相互変換は、データ処理や計算処理において欠かせない基本操作です。
floatとintの変換方法を理解していないと、計算結果が期待と異なったり、エラーが発生したりする可能性があります。例えば、小数点以下の処理方法によって、切り捨て、切り上げ、四捨五入と結果が変わってくるため、用途に応じた適切な変換方法を選ぶ必要があるのです。
本記事では、Pythonにおけるfloatとintの変換方法を体系的に解説していきます。基本的な変換関数から、四捨五入や切り捨て、切り上げといった実務でよく使う処理まで、サンプルコードを交えながら詳しく見ていきましょう。
floatとintの変換:基本と結論
それではまず、floatとintの変換における基本的な考え方と結論について解説していきます。
float型とint型の違いとは
Pythonにおいて、float型は小数点を含む数値を扱うデータ型です。一方、int型は整数のみを扱います。
float型は3.14や2.5のように小数点以下の値を保持できますが、int型は1、2、100のように整数値しか扱えません。この違いを理解することが、適切な型変換の第一歩となるでしょう。
両者は内部的な表現方法も異なります。floatは浮動小数点数として、intは整数として格納されるため、メモリ使用量や演算速度にも差が生じるのです。
変換の基本方針
floatからintへの変換では、小数点以下が切り捨てられる点に注意が必要です。これはPythonの標準的な動作であり、負の数でも同様に0に近い方向へ切り捨てられます。
intからfloatへの変換は情報の損失がないため、比較的シンプルに行えます。整数値をfloat型に変換すると、小数点以下が.0として表現されるようになるでしょう。
用途に応じて、単純な型変換だけでなく、四捨五入や切り上げといった処理を組み合わせることで、より精密な数値処理が可能になります。
最も使われる変換方法一覧
Pythonでfloatとintを変換する際に最もよく使われる方法を表にまとめました。
| 変換方法 | 関数 | 動作 | 使用例 |
|---|---|---|---|
| floatからint | int() | 小数点以下切り捨て | int(3.9) → 3 |
| intからfloat | float() | 小数点以下に.0を付与 | float(5) → 5.0 |
| 四捨五入 | round() | 指定桁数で四捨五入 | round(3.5) → 4 |
| 切り捨て | math.floor() | 小さい方の整数へ | math.floor(3.9) → 3 |
| 切り上げ | math.ceil() | 大きい方の整数へ | math.ceil(3.1) → 4 |
この表を参考にしながら、次の見出しから各変換方法の詳細を確認していきましょう。
int()関数によるfloatからintへの変換
続いては、最も基本的なfloatからintへの変換方法であるint()関数の使い方を確認していきます。
int()関数の基本的な使い方
int()関数は、引数に指定した値を整数型に変換する組み込み関数です。float型の数値を渡すと、小数点以下を切り捨てた整数が返されます。
float_num = 3.8
int_num = int(float_num)
print(int_num) # 出力: 3
result = int(9.999)
print(result) # 出力: 9
上記のコードからわかるように、3.8は3に、9.999は9に変換されるでしょう。小数点以下がどれだけ大きくても、切り捨てられてしまうのです。
負の数の変換における注意点
負の数をint()で変換する場合、0に近い方向へ切り捨てられる点に注意が必要です。これは一般的な数学の「切り捨て」とは若干異なる動作となります。
negative_float = -3.7
converted = int(negative_float)
print(converted) # 出力: -3
result = int(-9.1)
print(result) # 出力: -9
-3.7は-3に、-9.1は-9に変換されます。数値としては小さい方(-4や-10)ではなく、0に近い方向(-3や-9)へ丸められるのです。
文字列からの変換も可能
int()関数は、数値を表す文字列からの変換にも対応しています。ただし、小数点を含む文字列を直接int()で変換するとエラーになる点に注意しましょう。
# 整数を表す文字列からの変換
str_num = "123"
int_num = int(str_num)
print(int_num) # 出力: 123
# 小数点を含む文字列は一度floatに変換してからintへ
float_str = "3.14"
result = int(float(float_str))
print(result) # 出力: 3
小数点を含む文字列をint型にしたい場合は、まずfloat()で浮動小数点数に変換してから、int()で整数化する必要があります。
float()関数によるintからfloatへの変換
続いては、整数を浮動小数点数に変換するfloat()関数について確認していきます。
float()関数の基本構文
float()関数は、引数に指定した値を浮動小数点数型に変換する組み込み関数です。int型の数値を渡すと、小数点以下が.0の浮動小数点数が返されます。
int_num = 5
float_num = float(int_num)
print(float_num) # 出力: 5.0
result = float(100)
print(result) # 出力: 100.0
print(type(result)) # 出力: <class 'float'>
整数5は5.0に、100は100.0に変換されるでしょう。type()関数で型を確認すると、確かにfloat型になっていることがわかります。
intからfloatへの変換が必要な場面
整数を浮動小数点数に変換する必要があるのは、どのような場面でしょうか。主に除算の結果を正確に扱いたい場合や、数値計算ライブラリで浮動小数点数が要求される場合に必要となります。
# 整数同士の除算
a = 7
b = 2
result1 = a / b # Pythonでは自動的にfloatになる
print(result1) # 出力: 3.5
# 明示的にfloatへ変換してから計算
result2 = float(a) / float(b)
print(result2) # 出力: 3.5
Python 3では除算演算子(/)を使うと自動的にfloat型の結果が返されますが、明示的に変換することでコードの意図が明確になります。
文字列からfloatへの変換
float()関数も、数値を表す文字列からの変換に対応しています。int()と異なり、小数点を含む文字列も直接変換可能です。
# 整数を表す文字列
str_int = "42"
float_from_str = float(str_int)
print(float_from_str) # 出力: 42.0
# 小数点を含む文字列
str_float = "3.14159"
pi = float(str_float)
print(pi) # 出力: 3.14159
このように、float()関数は柔軟に文字列から数値への変換を行えるため、ファイル読み込みやユーザー入力の処理でよく使われます。
round()関数による四捨五入変換
続いては、小数点以下を四捨五入して整数や指定桁数の小数に変換するround()関数を確認していきます。
round()関数の基本的な使い方
round()関数は、指定した桁数で数値を四捨五入する組み込み関数です。第2引数を省略すると、最も近い整数に四捨五入されます。
# 整数に四捨五入
num1 = round(3.5)
print(num1) # 出力: 4
num2 = round(3.4)
print(num2) # 出力: 3
num3 = round(2.8)
print(num3) # 出力: 3
3.5は4に、3.4は3に四捨五入されるでしょう。int()関数との違いは、単純な切り捨てではなく、0.5を境に近い方の整数になる点です。
小数点以下の桁数を指定した四捨五入
round()関数の第2引数に桁数を指定すると、その桁数で四捨五入した浮動小数点数が返されます。これは小数点以下を完全に削除せず、一定の精度を保ちたい場合に便利です。
# 小数第1位で四捨五入
value1 = round(3.14159, 1)
print(value1) # 出力: 3.1
# 小数第2位で四捨五入
value2 = round(3.14159, 2)
print(value2) # 出力: 3.14
# 小数第3位で四捨五入
value3 = round(2.71828, 3)
print(value3) # 出力: 2.718
このように、第2引数で精度をコントロールできるため、金額計算や科学計算で重宝するでしょう。
round()の偶数丸め(銀行丸め)に注意
Pythonのround()関数は、ちょうど中間値(.5)の場合、偶数に丸めるという特殊な動作をします。これは「銀行丸め」または「偶数丸め」と呼ばれる方式です。
print(round(0.5)) # 出力: 0(偶数の0に丸める)
print(round(1.5)) # 出力: 2(偶数の2に丸める)
print(round(2.5)) # 出力: 2(偶数の2に丸める)
print(round(3.5)) # 出力: 4(偶数の4に丸める)
一般的な四捨五入とは異なる動作なので、この挙動を理解しておくことが重要です。常に切り上げたい場合は、次の見出しで紹介するmath.ceil()を使用しましょう。
mathモジュールによる切り捨て・切り上げ
続いては、mathモジュールを使った厳密な切り捨て・切り上げの方法を確認していきます。
math.floor()による切り捨て
math.floor()関数は、引数以下の最大の整数を返す関数です。int()と似ていますが、負の数の扱いが異なります。
import math
# 正の数の切り捨て
result1 = math.floor(3.9)
print(result1) # 出力: 3
result2 = math.floor(3.1)
print(result2) # 出力: 3
# 負の数の切り捨て(小さい方へ)
result3 = math.floor(-3.1)
print(result3) # 出力: -4
result4 = math.floor(-3.9)
print(result4) # 出力: -4
int()では-3.1が-3になりますが、math.floor()では-4になるでしょう。これは数学的な「床関数」の定義に従った動作です。
math.ceil()による切り上げ
math.ceil()関数は、引数以上の最小の整数を返す関数です。小数点以下がわずかでもあれば、次の整数に切り上げられます。
import math
# 正の数の切り上げ
result1 = math.ceil(3.1)
print(result1) # 出力: 4
result2 = math.ceil(3.9)
print(result2) # 出力: 4
# 負の数の切り上げ(大きい方へ)
result3 = math.ceil(-3.9)
print(result3) # 出力: -3
result4 = math.ceil(-3.1)
print(result4) # 出力: -3
負の数では-3.9が-3に切り上げられます。これは0から離れる方向ではなく、数学的に大きい方向への切り上げです。
実務での使い分け
| 関数 | 用途 | 具体例 |
|---|---|---|
| int() | 単純に整数化したい | インデックス計算、カウント処理 |
| round() | 四捨五入で丸めたい | 金額計算、統計処理 |
| math.floor() | 常に小さい整数へ | ページ分割、配列インデックス |
| math.ceil() | 常に大きい整数へ | 必要なリソース数の計算 |
用途に応じて適切な関数を選ぶことで、バグの少ない堅牢なコードが書けるでしょう。
まとめ
本記事では、Pythonにおけるfloatとintの変換方法について、基本から応用まで詳しく解説してきました。
int()関数は小数点以下を切り捨て、float()関数は整数を浮動小数点数に変換します。単純な型変換であれば、これらの組み込み関数で十分対応できるでしょう。
より精密な制御が必要な場合は、round()で四捨五入、math.floor()で切り捨て、math.ceil()で切り上げと使い分けることが重要です。特に負の数を扱う場合は、各関数の挙動の違いを理解しておく必要があります。
データ処理や数値計算において、適切な型変換は正確な結果を得るための基礎となります。本記事で紹介した変換方法を実際のコードで試しながら、それぞれの特性を体得していってください。状況に応じた最適な変換関数を選択できるようになれば、Pythonでの数値処理がより快適になるはずです。