【Java】BigDecimal型で数値の比較
BigDecimal型の比較に躓いたので、メモ。
COBOLやVBを扱っていたときは数値の比較は <, > ,=しか利用したことがなかった。
JavaでBigDecimal型を数値として利用し、値が同じなら・・・ということを
したかったのだが、どうも、不等号ではうまく比較できない。
いろいろ調べたら 、②の方法でいけるやと思ったので実装。
でも、仕事仲間から可視性を上げるなら③だよんと教えられた。
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でおなじ
= です