正確に計算を行う!Javaでbigdecimalを使う方法【初心者向け】

初心者向けにJavaでBigDecimalクラスを使う方法について解説しています。Javaでの計算において小数点以下を誤差なく扱うために知っておきましょう。実際にプログラムを書いて説明しているので、書きながら理解してきましょう。

TechAcademyマガジンはオンラインのプログラミングスクールTechAcademy [テックアカデミー]が運営する教育×テクノロジーのWebメディアです。初心者でもすぐ勉強できる記事が2,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);

 

[PR] Javaで挫折しない学習方法を動画で公開中

実際に書いてみよう

乗算について、四則演算を使う場合と使わない場合で実行結果を比較してみます。

ソースコード

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人ずつつき、マンツーマンのメンタリングで学習をサポートし、最短4週間で習得することが可能です。