BigDecimal乘法返回0?

时间:2014-03-24 22:04:28

标签: java bigdecimal

我是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而不是它应该给我的大数字。任何帮助表示赞赏。

2 个答案:

答案 0 :(得分:5)

BigDecimal productOfStock1 = BigDecimal.ZERO;

您需要使用1对其进行初始化,因为

0 * X = 0

(X = 1/0 :)除外)

答案 1 :(得分:1)

不要将productOfStock1初始化为0,而是使用1代替。否则,您将始终乘以0.