正確に計算を行う!Javaでbigdecimalを使う方法【初心者向け】
初心者向けにJavaでBigDecimalクラスを使う方法について解説しています。Javaでの計算において小数点以下を誤差なく扱うために知っておきましょう。実際にプログラムを書いて説明しているので、書きながら理解してきましょう。
テックアカデミーマガジンは受講者数No.1のプログラミングスクール「テックアカデミー」が運営。初心者向けにプロが解説した記事を公開中。現役エンジニアの方はこちらをご覧ください。 ※ アンケートモニター提供元:GMOリサーチ株式会社 調査期間:2021年8月12日~8月16日 調査対象:2020年8月以降にプログラミングスクールを受講した18~80歳の男女1,000名 調査手法:インターネット調査
今回は、JavaのBigDecimalクラスについて解説しています。
数値の小数点以下を正確に扱う上でぜひ理解しておきましょう。
なお本記事は、TechAcademyのJava講座の内容をもとに作成しています。
今回は、Javaに関する内容だね!
どういう内容でしょうか?
BigDecimalクラスの使い方について詳しく説明していくね!
お願いします!
BigDecimalとは
Javaで少数を扱う場合、丸め誤差が発生する場合があります。
これはJavaでは数値を2進数で扱っていて、2進数では10進数の少数値を正確に表すことができない為です。
小数点以下を正確に扱う為には、BigDecimalクラスを使用します。
BigDecimalクラスには、四則演算等の計算用のメソッドが用意されています。
bigdecimalの書き方
加算、減算、乗算、除算、剰余算の書き方です。
加算:BigDecimal.addメソッドを使います。
BigDecimal b1 = new BigDecimal("3.1415"); BigDecimal b2 = new BigDecimal("9.9"); BigDecimal b3 = b1.add(b2);
減算:BigDecimal.subtractメソッドを使います。
BigDecimal b1 = new BigDecimal("3.1415"); BigDecimal b2 = new BigDecimal("9.9"); BigDecimal b3 = b1.subtract(b2);
乗算:BigDecimal.multiplyメソッドを使います。
BigDecimal b1 = new BigDecimal("3.1415"); BigDecimal b2 = new BigDecimal("9.9"); BigDecimal b3 = b1.multiply(b2);
除算:BigDecimal.divideメソッドを使います。
BigDecimal b1 = new BigDecimal("9.9"); BigDecimal b2 = new BigDecimal("3.3"); BigDecimal b3 = b1.divide(b2);
BigDecimal.divideメソッドでは、除算結果が無限小数となる場合、
java.lang.ArithmeticException が発生します。
その場合には、divideメソッドの第二引数で丸めモードを指定することで計算結果を丸めることができます。
丸めモードの指定にはRoundingModeクラスを使います。
BigDecimal b1 = new BigDecimal("9.9451"); BigDecimal b2 = new BigDecimal("3.3"); //四捨五入する BigDecimal b3 = b1.divide(b2,RoundingMode.HALF_UP);
実際に書いてみよう
乗算について、四則演算を使う場合と使わない場合で実行結果を比較してみます。
ソースコード
BigDecimal b1 = new BigDecimal("4.1"); BigDecimal b2 = new BigDecimal("93.03"); BigDecimal b3 = b1.multiply(b2); System.out.println("BigDecimalを使って4.1 * 93.03を計算 :" + b3); System.out.println("BigDecimalを使わずに4.1 * 93.03を計算:" + 4.1 * 93.03);
実行結果
BigDecimalを使って4.1 * 93.03を計算 :381.423 BigDecimalを使わずに4.1 * 93.03を計算:381.42299999999994
となります。
BigDecimalを使うことで、小数点以下を正確に計算できていることがわかります。
入門向けJavaの学習サイトもまとめているので、合わせてご覧ください。
内容分かりやすくて良かったです!
ゆかりちゃんも分からないことがあったら質問してね!
分かりました。ありがとうございます!
また、オンラインのプログラミングスクールTechAcademyでは、Java講座を開催しています。
JavaやServletの技術を使ってWebアプリケーションの開発を学ぶことができます。
現役エンジニアがパーソナルメンターとして受講生に1人ずつつき、マンツーマンのメンタリングで学習をサポートし、習得することが可能です。