JavaBigDecimalの落とし穴

1.コンストラクターのピット

public void constructTest(){

   BigDecimal value1 =new BigDecimal(10.511);
   System.out.println("value1: " + value1);
   BigDecimal value2 = new BigDecimal("10.511");
   System.out.println("value2: " + value2);

}

私たちの予想によれば、value1の出力は10.511になるはずですが、実際の値は次のようになりません。

value1: 10.510999999999999232613845379091799259185791015625
value2: 10.511

doubleデータをパラメーターとして使用する場合、構築されたBigDecimalオブジェクトvalue1はデータの精度を保証しません。 
文字列をパラメータとしてオブジェクトを作成する場合、データの精度が保証されます。

 

2.BigDecimal不変性ピット

BigDecimalには、Stringと同じオブジェクト不変行があり、一度割り当てられると変更されません。

public void immutableTest() {

   BigDecimal count = new BigDecimal("1.3");
   count.add( new BigDecimal("9.2"));
   System.out.println("count:" + count);

}
count:1.3

コードを実行すると、カウントが期待される10.5ではないことがわかります。または、最初の割り当て1.3 
BigDecimalは、操作を実行するときに結果を保存する必要があります。

 

 

 

おすすめ

転載: blog.csdn.net/johnt25/article/details/86743478