整数同士の割り算 / が小数にならず切り捨てられる
Rubyの/演算子は、両辺が整数の場合は商の整数部分だけを返します。小数点以下は切り捨てられ、割り切れなくても整数のままです。
なぜエラーが出ないのか
出力: 3
(エラーなし)- Rubyは何も報告しません。文法として正しいためです
出力: 3- 実際の挙動 — 期待した結果と食い違っている箇所
見つけ方- エラーが出ないので、出力を目で確かめるしかありません。この種の誤りが最も発見が遅れます
このエラーが出る典型パターン
パターン1
1 total = 7 2 people = 2 3 puts total / people ^
出力: 3
整数同士の/は商の整数部分だけを返します。小数の結果が欲しい場合はto_fで浮動小数点数に変換する必要があります。
直し方: total / people を total.to_f / people にします。
広告
広告スロット(未設定)
パターン2
1 minutes = 100 2 hours = 60 3 puts minutes / hours ^
出力: 1
割り切れない整数の割り算は、小数点以下が切り捨てられたまま整数として返ってきます。
直し方: minutes / hours を minutes.to_f / hours にします。
パターン3
1 price = 500 2 count = 3 3 puts price / count ^
出力: 166
1人あたりの正確な金額を求めたい場合、整数のまま割ると誤差が出てしまいます。
直し方: price / count を price.to_f / count にします。
パターン4
1 distance = 10 2 speed = 3 3 puts distance / speed ^
出力: 3
所要時間の計算など、小数が意味を持つ場面では明示的にto_fを使う必要があります。
直し方: distance / speed を distance.to_f / speed にします。
パターン5
1 apples = 17 2 baskets = 5 3 puts apples / baskets ^
出力: 3
エラーは出ないため、実際に出力を確認しない限りこの誤差には気づけません。
直し方: apples / baskets を apples.to_f / baskets にします。
よくある誤解
「割り算だから結果は自動的に小数になるはず」という思い込みは誤りです。小数の結果が欲しい場合は、片方を to_f で浮動小数点数に変換してから割る必要があります。
まとめ
整数同士の割り算 / が小数にならず切り捨てられるは初級でつまずきやすい項目です。上の5パターンを実際に手で直すと、エラーメッセージのどこを読めばよいかが掴めます。