BigDecimal的补充

Ser*_*Amo 147 java bigdecimal

我想用BigDecimal类型表示的一些货币值做一些简单的总和.

BigDecimal test = new BigDecimal(0);
System.out.println(test);
test.add(new BigDecimal(30));
System.out.println(test);
test.add(new BigDecimal(45));
System.out.println(test);
Run Code Online (Sandbox Code Playgroud)

显然我不太了解BigDecimal算术,看后面的输出.

Test
0
0
0
Run Code Online (Sandbox Code Playgroud)

谁能帮我吗?

Vin*_*nie 264

BigDecimal是不可变的,所以你需要这样做:

BigDecimal result = test.add(new BigDecimal(30));
System.out.println(result);
Run Code Online (Sandbox Code Playgroud)

  • 我能理解这种困惑.即使它声明BigDecimal是不可变的,文档可能会更好.例如,文档声明方法`add(..)`:"augend - 要添加**到这个**BigDecimal的值.".此外,说"...返回一个**新的**BigDecimal ......"而不是"...返回一个BigDecimal ......"将是一个很好的接触.也许我只是在挑剔,但恕我直言,这里有改进的余地:-) (26认同)
  • 只是旁注,BigDecimal不是完全不可变的,因为它不像String那样最终...... (3认同)

Ank*_*oel 31

这里的Java文档看起来,添加返回一个新的BigDecimal:

BigDecimal test = new BigDecimal(0);
System.out.println(test);
test = test.add(new BigDecimal(30));
System.out.println(test);
test = test.add(new BigDecimal(45));
System.out.println(test);
Run Code Online (Sandbox Code Playgroud)


Mau*_*rry 16

BigDecimal test = new BigDecimal(0);
System.out.println(test);
test = test.add(new BigDecimal(30));
System.out.println(test);
test = test.add(new BigDecimal(45));
System.out.println(test);
Run Code Online (Sandbox Code Playgroud)


nfe*_*ner 11

这实际上相当容易.这样做:

BigDecimal test = new BigDecimal(0);
System.out.println(test);
test = test.add(new BigDecimal(30));
System.out.println(test);
test = test.add(new BigDecimal(45));
System.out.println(test);
Run Code Online (Sandbox Code Playgroud)

也可以看看: BigDecimal#add(java.math.BigDecimal)


ZZ *_*der 9

BigInteger是不可变的,你需要这样做,

  BigInteger sum = test.add(new BigInteger(30));  
  System.out.println(sum);
Run Code Online (Sandbox Code Playgroud)