🔄 Python float / int 変換シミュレーター
数値を入力し、変換方法を選択してください。Pythonが実際にどのように変換するかをリアルタイムで確認できます。
📚 変換方法の完全ガイド
float → int の変換メソッド比較
int() と math.floor() は正の数では同じ結果になりますが、負の数では異なる結果になります。
int(x)
ゼロ方向へ切り捨て。小数部を単純に削除します。
int(3.9) → 3int(-3.9) → -3
math.floor(x)
負の無限大方向へ切り捨て(床関数)。
floor(3.9) → 3floor(-3.9) → -4
math.ceil(x)
正の無限大方向へ切り上げ(天井関数)。
ceil(3.1) → 4ceil(-3.9) → -3
round(x)
銀行丸め(偶数丸め)。0.5は最も近い偶数へ。
round(0.5) → 0round(1.5) → 2
round(x, n)
指定した小数点以下の桁数に丸めます。
round(3.14159, 2) → 3.14
int // 1
整数除算を利用した切り捨て(floor相当)。
3.9 // 1 → 3.0-3.9 // 1 → -4.0
変換方法の違い一覧表
| 入力値 | int() | math.floor() | math.ceil() | round() | // 1 |
|---|---|---|---|---|---|
| 3.0 | 3 | 3 | 3 | 3 | 3.0 |
| 3.1 | 3 | 3 | 4 | 3 | 3.0 |
| 3.5 | 3 | 3 | 4 | 4 | 3.0 |
| 3.9 | 3 | 3 | 4 | 4 | 3.0 |
| -3.0 | -3 | -3 | -3 | -3 | -3.0 |
| -3.1 | -3 | -4 | -3 | -3 | -4.0 |
| -3.5 | -3 | -4 | -3 | -4 | -4.0 |
| -3.9 | -3 | -4 | -3 | -4 | -4.0 |
| 0.5 | 0 | 0 | 1 | 0(銀行丸め) | 0.0 |
| 1.5 | 1 | 1 | 2 | 2(銀行丸め) | 1.0 |
| 2.5 | 2 | 2 | 3 | 2(銀行丸め) | 2.0 |
round() は四捨五入ではなく、ちょうど0.5の場合は最も近い偶数に丸めます。これはIEEE 754標準に準拠した挙動です。例:round(0.5) = 0、round(1.5) = 2、round(2.5) = 2。
💻 実践コード例
基本的な型変換
文字列からの数値変換(エラーハンドリング付き)
数値フォーマット・文字列変換
特殊な値の変換
📋 変換ステップと実例
float → int:ステップ別解説
| ステップ | 操作 | コード例 | 結果 | 注意点 |
|---|---|---|---|---|
| ① | 値の確認 | type(x) |
<class 'float'> |
変換前に型を確認 |
| ② | 無限大/NaN確認 | math.isfinite(x) |
True / False |
inf, nanはintに変換不可 |
| ③ | 変換方法の選択 | int / floor / ceil / round | — | 用途に合わせて選ぶ |
| ④ | 変換実行 | result = int(x) |
整数値 | 小数部は完全に失われる |
| ⑤ | 型確認 | type(result) |
<class 'int'> |
変換後に型を確認 |
よくある変換シナリオと推奨方法
| シナリオ | 推奨方法 | 例 | 理由 |
|---|---|---|---|
| インデックスに使う | int(x) |
int(3.9) → 3 |
単純な小数部削除 |
| 切り上げ(ページ数など) | math.ceil(x) |
ceil(3.1) → 4 |
余りがあれば+1ページ |
| 統計・金融計算 | round(x, n) |
round(3.145, 2) → 3.14 |
精度保持が必要 |
| 時刻(秒→分) | math.floor(x) |
floor(125/60) → 2 |
切り下げで正確な分数 |
| 文字列からの安全変換 | try: int(s) |
int("3.14") → ValueError |
例外処理が必須 |
| 精度が重要な金融演算 | decimal.Decimal |
Decimal("0.1") + Decimal("0.2") |
float誤差を回避 |
🔢 int型とfloat型の特徴
| 項目 | int(整数型) | float(浮動小数点数型) |
|---|---|---|
| 表現できる値 | 任意精度の整数(制限なし) | 64ビット倍精度(IEEE 754) |
| 有効桁数 | 無制限 | 約15〜17桁 |
| 表現範囲 | メモリが許す限り無制限 | ±1.8 × 10308 |
| 最小正の値 | 1 | 約5.0 × 10-324 |
| 誤差 | なし(正確) | 丸め誤差あり(例:0.1+0.2≠0.3) |
| 演算速度 | 大きい数は遅くなる場合あり | 固定サイズで高速 |
| 使用用途 | カウント・インデックス・ループ | 科学計算・測定値・割り算 |
| リテラル例 | 0, 42, -100, 10**20 |
3.14, 1.0, -0.5, 1e10 |
| 特殊値 | なし | float('inf'), float('nan'), float('-inf') |
intなど)とは異なり、ビット数の上限がありません。2 ** 1000のような巨大な数も正確に計算できます。
❓ よくある質問(FAQ)
両者は正の数では同じ結果になりますが、負の数では異なります。
int() はゼロ方向へ切り捨てます:int(-3.7) = -3
math.floor() は負の無限大方向へ切り捨てます:math.floor(-3.7) = -4
数学的な「床関数」が必要な場合は math.floor() を使いましょう。
Pythonのround()は「銀行丸め(偶数丸め)」を採用しています。ちょうど0.5の場合は、最も近い偶数に丸めます。
例:round(0.5) = 0(0は偶数)、round(1.5) = 2(2は偶数)、round(2.5) = 2(2は偶数)
一般的な四捨五入が必要な場合は int(x + 0.5) または math.floor(x + 0.5) を使います。
int("3.14")は直接 ValueError になります。小数点を含む文字列は、まずfloat()に変換してからint()に変換する必要があります。
int(“3.14”) # → ValueError ✗ エラー
これはfloat型がIEEE 754の64ビット2進数浮動小数点数で表現されているためです。0.1や0.2は2進数では無限循環小数になるため、正確に表現できません。
結果として 0.1 + 0.2 = 0.30000000000000004 となります。
正確な十進数演算が必要な場合は decimal.Decimal モジュールを使用してください:Decimal("0.1") + Decimal("0.2") = 0.3
int(float('inf')) は OverflowError、int(float('nan')) は ValueError が発生します。変換前に math.isfinite(x) で確認することをお勧めします。
x = float(‘inf’)
if math.isfinite(x):
result = int(x)
else:
print(“変換できません”)
はい、大きな違いがあります。Python 2では 5 / 2 = 2(整数除算)でしたが、Python 3では 5 / 2 = 2.5(float)になります。
Python 3で整数除算をしたい場合は //(floor除算)を使います:5 // 2 = 2
🔗 関連する型変換と応用
| 変換元 | 変換先 | 関数・方法 | コード例 | 注意点 |
|---|---|---|---|---|
| float | int | int() |
int(3.14) → 3 |
小数部は切り捨て |
| int | float | float() |
float(3) → 3.0 |
精度の低下なし |
| str | int | int() |
int("42") → 42 |
小数点含む文字列は不可 |
| str | float | float() |
float("3.14") → 3.14 |
指数表記も変換可能 |
| int/float | str | str() |
str(42) → "42" |
常に成功する |
| int/float | bool | bool() |
bool(0) → False |
0とNaN以外はTrue |
| int | 2進数文字列 | bin() |
bin(10) → "0b1010" |
intのみ使用可 |
| int | 16進数文字列 | hex() |
hex(255) → "0xff" |
intのみ使用可 |
| int | 8進数文字列 | oct() |
oct(8) → "0o10" |
intのみ使用可 |
| float | Decimal | Decimal() |
Decimal("0.1") |
文字列経由で精度保持 |
| Fraction | float | float() |
float(Fraction(1,3)) |
有理数の近似値 |
