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は、操作を実行するときに結果を保存する必要があります。