BigDecimal添加问题

时间:2014-02-23 00:23:58

标签: java bigdecimal

有这个代码。问题如下:numar计算应该如此,但无法添加到pi,它保持0.0,不变。为什么呢?

 public static void piLeibniz(int numarZecimale)
{
    String piReal = "3.1415926535897932384626433832795028841971693993751058209749445923078164062862089986280348253421170679";
    long t1 = System.currentTimeMillis();

    BigDecimal numar ;
    BigDecimal pi = new BigDecimal("0.0");

    for(int i = 0; i<=100000000;i++)
    {
        numar = new BigDecimal( 4*((Math.pow(-1, i))/((2*i)+1)));
        pi = pi.add(numar);
       //System.out.println(numar);
        String piString = pi.toString();
        System.out.println(piString);

        if(!piString.substring(0, numarZecimale).equals(piReal.substring(0, numarZecimale)))
        {
        } else {
            long t2 = System.currentTimeMillis();
            System.out.println("Pi este:" + piReal.substring(0, numarZecimale)+ " calculat in " + (t2-t1) + " ms");
            break;
        }

    }
}
编辑(编辑为Reimeus说): 如果方法的参数高于3,则抛出StringIndexOutOfBoundsException。为什么?

2 个答案:

答案 0 :(得分:6)

add返回一个不可变的新BigDecimal值。原始值需要分配给方法的结果,否则pi的值将保持其原始值

pi = pi.add(numar);

答案 1 :(得分:4)

添加后,您需要将变量'pi'的值重新分配给自身: pi = pi.add(numar);

public BigDecimal add(BigDecimal augend)

返回一个BigDecimal,其值为(this + augend),其比例为max(this.scale(),augend.scale())。