検索
連載

プログラムにおける数の扱い方の常識プログラマーの常識をJavaで身につける(3)(2/3 ページ)

本連載は、Java言語やその文法は一通り理解しているが、「プログラマー」としては初心者、という方を対象とします。Javaコアパッケージを掘り下げることにより「プログラマーの常識」を身に付けられるように話を進めていきます。今回は、「数」に関する常識をJavaで身に付けていきます。

PC用表示 関連情報
Share
Tweet
LINE
Hatena

デシマルで加減乗除してみる [java.math.BigDecimal]

 続いて、先ほど紹介したjava.math.BigDecimalクラスについて、四則演算のための典型的なメソッドを中心に、主要なメソッドを解説していきます。

java.math.BigDecimal#add(加算)

 足し算を行いたい場合には addメソッドを利用します。(3)の個所のように、BigDecimalクラスのインスタンスを2つ利用して加算を実現します。加算した後の値がメソッドの返り値として戻されます。 下記のソースコードを実行してみましょう。

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

図3 デシマル利用サンプル(加算)
図3 デシマル利用サンプル(加算)

java.math.BigDecimal#subtract(減算)

 引き算を行いたい場合には、subtractメソッドを利用します。上記DecimalSample.javaのpaintCompenentを下記に書き換えて実行してみましょう。

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

図4 デシマル利用サンプル(減算)
図4 デシマル利用サンプル(減算)

 (4)の個所のように、BigDecimalクラスのインスタンスを2つ利用して減算を実現します。減算した後の値がメソッドの返り値として戻されます。

java.math.BigDecimal#multiply(乗算)

 掛け算を行いたい場合には、multiplyメソッドを利用します。上記DecimalSample.javaのpaintCompenentを下記に書き換えて実行してみましょう。

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

図5 デシマル利用サンプル(乗算)
図5 デシマル利用サンプル(乗算)

 (5)の個所のように、BigDecimalクラスのインスタンスを2つ利用して乗算を実現します。乗算した後の値がメソッドの返り値として戻されます。

java.math.BigDecimal#divide(除算)

 割り算を行いたい場合には、divideメソッドを利用します。divideメソッドには、いくつかの注意すべきポイントがあります。

  • 私たちの多くが小学校で習ったような割り算を実行するために、丸めモードとして、java.math.BigDecimal.ROUND_HALF_UPを指定するようにします。
  • スケールを指定するメソッドと、スケールを指定しないメソッドとの2種類がある点に注意が必要です。

●スケールを指定しない例

 上記DecimalSample.javaのpaintCompenentを下記に書き換えて実行してみましょう。

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

 スケールを指定しない場合には、割られる数のスケールを計算結果のスケールに適用します(この例では、小数点以下第1位まで)。

図6 デシマル利用サンプル(除算1けた)
図6 デシマル利用サンプル(除算1けた)

●スケールを指定する例

 上記DecimalSample.javaのpaintCompenentを下記に書き換えて実行してみましょう。

*** 一部省略されたコンテンツがあります。PC版でご覧ください。 ***

図7 デシマル利用サンプル(除算7けた)
図7 デシマル利用サンプル(除算7けた)

 小数点以下第7位まで求めるよう、スケールを指定します。割られる数のスケールに関係なく、指定したスケール(この例では、7けたまで)を計算結果として取得できます。

デシマル型の比較

 デシマル型を使っていてよく間違いに陥りやすいのが、デシマル型の値の比較についてです。java.math.BigDecimalクラスには、値の比較を行うためのメソッドとして、compareToメソッドとequalsメソッドの2つがあります。

● java.math.BigDecimal#compareToメソッド

 与えられた2つのBigDecimalオブジェクトの大小比較を行います。注意すべき点は、このメソッドで一致するかどうかを比較した際の判定結果についてです。compareToでは、2つのBigDecimalオブジェクトの値が一致するかをスケールを無視して比較します。例えば、2.0と2.00は等しいものと判断します。この点を特に注意する必要があります。

 それ以外の点については、通常のcompareToメソッドと同様なものとして考えて差し支えないです。

● java.math.BigDecimal#equalsメソッド

 与えられた2つのBigDecimalオブジェクトの値が一致するかどうかを比較します。注意すべき点は、このメソッドでは、compareToとは異なり、2つのBigDecimalオブジェクトが値もスケールも同じである場合にだけ等しいと見なすという点です。例えば、このメソッドでは、2.0と2.00は等しくないものと判断します。

Copyright © ITmedia, Inc. All Rights Reserved.