【Java】BigDecimalの値をcompareTo()で比較する!

BigDecimalの値の比較を行う場合にはcompareTo()メソッドを使用します。

BigDecimalクラスは誤差が出ないように正確な値を求めたい場に使用するクラスである為、compareTo()メソッドと組み合わせて使うことでより正確に値の比較を行うことができます。

compareTo()メソッドの他に比較するメソッドとしてequals()メソッドもありますが、場合によっては返す値が異なりますので使い方には注意が必要です。

今回は以下の場合でBigDecimalの値を比較してきます。
compareTo()でBigDecimalの値を比較する場合
equal()とcompareTo()でBigDecimalの値を比較した時の違い

BigDecimalクラスとは

BigDecimalクラスとは、誤差が出ないように正確な値を求めたい場合に使用するクラスとなります。

BigDecimalクラスを使用する場合はBigDecimalを下記のようにインポートする必要があります。

compareTo()メソッドとは

BigDecimalクラスのcompareTo()メソッドは数値を比較するメソッドとなります。

compareTo()メソッドの書き方

compareTo()メソッドの構文は下記となります。

()の引数にdate値2を指定することで、date値1とdateの値2を比較するようになります。
比較した場合、一致する場合は「0」を、異なる場合は「0以外」を返します。

値の比較を行うサンプルコード

compareTo()メソッドを使って、値の比較を行うサンプルコードを紹介します。

出力結果

10と20の比較:
20の方が大きい

BigDecimalクラスのcompareTo()メソッドによって比較した結果を返しています。

equals()とcompareTo()との違い

equals()で比較した場合とcompareTo()で比較した場合とでは返す結果が異なることがあります。
そのサンプルコードを見てみます。

出力結果

10と10.0とのequalsメソッドでの比較:
10と10.0は等しくない

10と10.0とのcompareToメソッドでの比較:
10と10.0は等しい

bd1とbd2はどちらも値が10である為、compareTo()メソッドの場合では等しいと判断しています。
しかし、equals()メソッドでは等しくないと判断しています。

equals()メソッドは単純に文字列の比較を行う為、「10」と「10.0」は別の値であると判定し、falseを返しています。

しかし、ompareTo()メソッドはBigDecimalクラスによって「10」と「10.0」は同じ値であると判断し、「0」を返しています。

今回のポイント

BigDecimalで値を比較するにはcompareTo()

BigDecimalで値の比較を行うには、BigDecimalクラスのcompareTo()メソッドを使用する

「BigDecimal」インスタンス同士での値の比較には、BigDecimalクラスのcompareTo()メソッドを使います。

このメソッドはパラメータの「BigDecimal」インスタンスと値を比較して、 パラメータの「BigDecimal」インスタンスの値の方が小さければ「1」を、大きければ「-1」 を、等しければ「0」を戻します。

サンプルコードでは、「bd1」と「bd2」はどちらも「10」という値ですが、compareTo()メソッドでは値が等しいと判定され、equals()メソッドでは値が異なると判定されています。
これは、equals()メソッドは2つの「BigDecimal」インスタンスの値だけでなく、スケール(小数点以下の桁数)も等しいかどうかも判定しているからです。

「BigDecimal」インスタンス同士が等しいかどうかを判定する場合、値だけを見ることがほとんどなので、そのような場合はcompareTo()メソッドを使うようにしてください。

関連記事

小数点以下の計算を正確に行うBigDecimalクラスについてはこちらをご参考ください。

Writer
壷井

壷井

株式会社flyhawkの壷井です。フライテックメディア事業部でのメディア運営・ライター業務なども担当。愛機はMac Book AirとThinkPad。好きな言語:swift、JS系(Node.js等)。好きなサーバー:AWS。受託開発やプログラミングスクールの運営をしております。ご気軽にお問い合わせください。

最新の案件情報

フリーランスエンジニアの案件探し