こんにちは。
最近雨振りすぎで、モチベーションが持ってかれますが、力尽くで高めてます。
どうもハチマキです。
はじめに
今回は業務で発生したエラーのメモを書いていきます。
※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
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
- -
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
-
完全に一人では解決できませんでした。。
日々勉強です。
以上、ハチマキでした。