icon
icon

正確に計算を行う!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);

 

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

初心者・未経験でもできる。まずはテックアカデミーに相談しよう

プログラミングを独学で学習していて、このように感じた経験はないでしょうか?

  • ・調べてもほしい情報が見つからない
  • ・独学のスキルが実際の業務で通用するのか不安
  • ・目標への学習プランがわからず、迷子になりそう

テックアカデミーでは、このような 学習に不安を抱えている方へ、マンツーマンで相談できる機会を無料で提供 しています。
30分間、オンラインでどんなことでも質問し放題です。

「受けてよかった」と感じていただけるよう カウンセラーやエンジニア・デザイナー があなたの相談に真摯に向き合います。

「自分に合っているか診断してほしい」
「漠然としているが話を聞いてみたい」

こんなささいな悩みでも大丈夫です。

無理な勧誘は一切ありません ので、まずはお気軽にご参加ください。
※体験用のカリキュラムも無料で配布いたします。(1週間限定)

今なら参加者限定の割引特典付き! 無料相談を予約する