読者です 読者をやめる 読者になる 読者になる

restofwaterimpのぎじゅつMemo

SIerに所属してます。企画から運用までやってます。現状、プロジェクトをスクラムで回したい!と試行錯誤中です

【Java】BigDecimal型で数値の比較

BigDecimal型の比較に躓いたので、メモ。

COBOLVBを扱っていたときは数値の比較は <, > ,=しか利用したことがなかった。

JavaBigDecimal型を数値として利用し、値が同じなら・・・ということを

したかったのだが、どうも、不等号ではうまく比較できない。

いろいろ調べたら 、②の方法でいけるやと思ったので実装。

でも、仕事仲間から可視性を上げるなら③だよんと教えられた。

 

BigDecimalって、文字のような挙動なのかなと思っている。

だから、Equalsであると、文字比較またはObject比較となって、数値比較に

ならない。CompareToならば、2進数での比較。

便利なメソッドであるdoubleValue()を利用すれば、人の目から見て、

dobule型、つまり数値で比較しているんだなと判断できるようである。

 

 

 

import java.math.BigDecimal;

 

public class SimpleGui3C {

 

static final BigDecimal TAISYO = new BigDecimal("500.00");

 

public static void main(String [] args){

BigDecimal a = new BigDecimal("500");

//500.00と500を比較する

//①Equalsで比較

if (TAISYO.equals(a)){

System.out.println("Equal");

}else{

System.out.println("Not Equal");

}

//②compareToを利用する

if (TAISYO.compareTo(a) == 0){

System.out.println("Compareでおなじ");

}else{

System.out.println("Compareでちがう");

}

//③doubleValueを利用する。

if (TAISYO.doubleValue() == a.doubleValue()){

System.out.println(" = です");

}else{

System.out.println(" <> です");

}

}

 

}

 
結果

Not Equal

Compareでおなじ

 = です