JAVA BigDecimal的相加

531 阅读1分钟

在 Java 中,BigDecimal 是不可变对象。

意味着对 BigDecimal 进行运算(比如相加)后会返回一个新的 BigDecimal 对象,而不会改变原始对象的值。

BigDecimal countNum = new BigDecimal(0); 
countNum.add(new BigDecimal("1"));
System.out.println(countNum);//相加后输出为0

因此,countNum.add(new BigDecimal("1")) 执行完后,原对象countNum 的值仍然是初始值 0。

如果想改变原对象的值,可以将相加后新返回的 BigDecimal 对象重新赋值给countNum,如下

BigDecimal countNum = new BigDecimal(0); 
countNum = countNum.add(new BigDecimal("1")); 
System.out.println(countNum);//此时输出为1

同时,在new一个BigDecimal对象的时候,最好传入字符串或者int类型的数字,因为传入double类型的数字会有很神奇的事情发生,

比如:

BigDecimal totalAmount = new BigDecimal(0);
totalAmount = totalAmount.add(new BigDecimal(0.59));
System.out.println(totalAmount);

输出结果: 0.58999999999999996891375531049561686813831329345703125

但是如果传入的是String类型的数字:

BigDecimal totalAmount = new BigDecimal(0);
totalAmount = totalAmount.add(new BigDecimal("0.59"));
System.out.println(totalAmount);

则输出结果正常: 0.59