我是Java的新手,我必须将52个数字相乘,范围从0到2000.我已经尝试使用* =而不是BigDecimal,但结果给了我0.0。
这是我的代码:
BigDecimal productOfStock1 = BigDecimal.ZERO;
for(int k = 1; k <= N; k++){
for(int i = 1; i <= n; i++){
if (i == 1){
stockPrice[k][i] = stockZero*Math.pow(e, form + sigma*(randomno.nextGaussian()));
}
else {
stockPrice[k][i] = stockPrice[k][i-1]*Math.pow(e, form + sigma*(randomno.nextGaussian()));
}
//sumOfStock += stockPrice[k][i];
//productOfStock *= stockPrice[k][i];
productOfStock1 = productOfStock1.multiply(BigDecimal.valueOf(stockPrice[k][i]));
System.out.println(/*"Stock at [" + i + "] for N = " + N + " and path number " + k + " is " + */stockPrice[k][i]);
}
}
System.out.println(productOfStock1);
这给了我0E-637而不是它应该给我的大数字。任何帮助表示赞赏。
答案 0 :(得分:5)
BigDecimal productOfStock1 = BigDecimal.ZERO;
您需要使用1
对其进行初始化,因为
0 * X = 0
(X = 1/0 :)除外)
答案 1 :(得分:1)
不要将productOfStock1
初始化为0,而是使用1代替。否则,您将始终乘以0.