Code Fix

初級

整数同士の割り算 / が小数にならず切り捨てられる

Rubyの/演算子は、両辺が整数の場合は商の整数部分だけを返します。小数点以下は切り捨てられ、割り切れなくても整数のままです。

なぜエラーが出ないのか

出力: 3
(エラーなし)
Rubyは何も報告しません。文法として正しいためです
出力: 3
実際の挙動 — 期待した結果と食い違っている箇所
見つけ方
エラーが出ないので、出力を目で確かめるしかありません。この種の誤りが最も発見が遅れます

このエラーが出る典型パターン

パターン1

 1  total = 7
 2  people = 2
 3  puts total / people     
                  ^
出力: 3

整数同士の/は商の整数部分だけを返します。小数の結果が欲しい場合はto_fで浮動小数点数に変換する必要があります。

直し方: total / peopletotal.to_f / people にします。

この問題を解いてみる →

広告
広告スロット(未設定)

パターン2

 1  minutes = 100
 2  hours = 60
 3  puts minutes / hours     
                   ^
出力: 1

割り切れない整数の割り算は、小数点以下が切り捨てられたまま整数として返ってきます。

直し方: minutes / hoursminutes.to_f / hours にします。

この問題を解いてみる →

パターン3

 1  price = 500
 2  count = 3
 3  puts price / count     
                  ^
出力: 166

1人あたりの正確な金額を求めたい場合、整数のまま割ると誤差が出てしまいます。

直し方: price / countprice.to_f / count にします。

この問題を解いてみる →

パターン4

 1  distance = 10
 2  speed = 3
 3  puts distance / speed     
                   ^
出力: 3

所要時間の計算など、小数が意味を持つ場面では明示的にto_fを使う必要があります。

直し方: distance / speeddistance.to_f / speed にします。

この問題を解いてみる →

パターン5

 1  apples = 17
 2  baskets = 5
 3  puts apples / baskets     
                   ^
出力: 3

エラーは出ないため、実際に出力を確認しない限りこの誤差には気づけません。

直し方: apples / basketsapples.to_f / baskets にします。

この問題を解いてみる →

よくある誤解

「割り算だから結果は自動的に小数になるはず」という思い込みは誤りです。小数の結果が欲しい場合は、片方を to_f で浮動小数点数に変換してから割る必要があります。

まとめ

整数同士の割り算 / が小数にならず切り捨てられるは初級でつまずきやすい項目です。上の5パターンを実際に手で直すと、エラーメッセージのどこを読めばよいかが掴めます。

演習をはじめる

関連するエラー

広告
広告スロット(未設定)