ホーム › エラー解決 › Ruby › ZeroDivisionError
Ruby ERROR

Ruby ZeroDivisionError の原因と解決法

整数を0で割ると発生するエラーです。空の配列でsizeを使って平均を出すときによく遭遇します。

このエラーメッセージ

ZeroDivisionError: divided by 0

原因

❌ エラーになるコード

NG
scores = []  # 空の配列
average = scores.sum / scores.size
puts average

✅ 修正したコード

OK
scores = []
average = scores.empty? ? 0 : scores.sum / scores.size
puts average

scores2 = [80, 90, 70]
puts scores2.sum / scores2.size
▶ 修正済みコードを実行エディタで開く
progoのRuby実行環境(インストール不要・登録不要)でその場で動作を確認できます。

解決のポイント

割り算の前に割る数が0でないか確認します。配列ならempty?で空チェックするのがRubyらしい書き方です。なお、小数の割り算10.0 / 0はエラーにならずInfinityを返すため、整数か小数かで挙動が違う点にも注意しましょう。

よくある質問

10.0 / 0 がエラーにならないのはなぜ?
Float同士の除算はIEEE 754に従いInfinityを返す仕様だからです。ZeroDivisionErrorになるのは整数の除算です。
fdivやquoでも起きる?
fdivはFloatの除算なのでInfinityを返します。整数除算(/や%)とdivはZeroDivisionErrorになります。