気ままに気ままのエンジニアブログ

定期的に得た知見を気ままに発信中

undefined method `/' for nil:NilClassエラーの解決方法

こんにちは。

最近雨振りすぎで、モチベーションが持ってかれますが、力尽くで高めてます。

どうもハチマキです。

はじめに

今回は業務で発生したエラーのメモを書いていきます。
※undefined methodエラーは、「未定義」が原因で発生するエラーとなります。今回のエラー解決方法はあくまで数ある原因の中の一つのソリューションです。

本日の概要 : undefined method `/' for nil:NilClassエラーの解決方法

事象

プロダクトコードを書き終わり、いざ自動テスト(rspec)を追加した際にエラーが発生

エラー例

$ bundle exec rspec~~~
Failure/Error: without_tax = with_tax / 1.1
     
ActionView::Template::Error:
  undefined method `/' for nil:NilClass
 ・
 ・
 (省略)

ん〜今回触れてないのにエラーでたなぁ。。なんでや。

問題点

端的に言うと、「浮動小数点問題」というやつでした。
以前定義したtaxの計算式に正しいデータ型を定義していなかったことが原因。

解決方法

この問題を解決するためには、いくつかの方法があるみたいですが、先輩エンジニアの方に相談したところRuby標準のBigDecimalクラスを使った計算方法で解決に至りました。

▽修正したソースコード

without_tax = BigDecimal(with_tax) / 1.1

BigDecimalとは??
"浮動小数点数演算ライブラリです。任意の精度で 10 進表現された浮動小数点数を扱えます。"とのこと。

参考資料

library bigdecimal (Ruby 2.7.0 リファレンスマニュアル)
[Ruby]消費税計算にはBigDecimalを使いましょう - Qiita

                                            • -

完全に一人では解決できませんでした。。
日々勉強です。

以上、ハチマキでした。