BigDecimal表现得很奇怪

Jam*_*ell 3 java bigdecimal

我有一个BigDecimal a1

BigDecimal a1 = new BigDecimal("0");
System.out.println(a1) //"0.0"
Run Code Online (Sandbox Code Playgroud)

当我做

a1.pow(2)
Run Code Online (Sandbox Code Playgroud)

我打印我得到的值"0.00"
在我的程序中,我循环这个,这会导致问题,因为每次循环时,它会使尾随的0加倍.为了让我的程序按预期工作,它可能会得到2 ^ 100个尾随零,这会降低性能并占用大量内存.我试过了

a1.stripTrailingZeros();
Run Code Online (Sandbox Code Playgroud)

但它仍然存储无用的零,需要很长时间才能计算出来.
在这里,我需要最大化性能,因此转换为字符串并进行字符串操作可能不是最好的方法.我该怎么做才能解决这个问题?

Ell*_*sch 5

BigDecimal是不可变的(并且不会在适当的位置运行).更改

a1.pow(2);
Run Code Online (Sandbox Code Playgroud)

到(像)

a1 = a1.pow(2);
Run Code Online (Sandbox Code Playgroud)

当然0 * 00.所以,得到一个非零数字; 你可以做点什么

public static void main(String[] args) {
    BigDecimal a1 = new BigDecimal("2");
    a1 = a1.pow(2);
    System.out.println(a1);
}
Run Code Online (Sandbox Code Playgroud)

我得到了(预期的)

4
Run Code Online (Sandbox Code Playgroud)

  • 我意识到我做了什么.我忘了做`a1 = a1.stripTrailingZeros`();. 谢谢 (2认同)