有这个代码。问题如下: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。为什么?
答案 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())。