小编use*_*256的帖子

使用BigDecimal进行不准确的乘法运算

我是Java的新手,我有一个程序可以生成52种不同的股票价格,范围从0到大约2000.我的程序还生成N个不同的股票价格"路径".我想知道这52种股票价格的产品是什么.我决定使用BigDecimal.

BigDecimal[] productOfStock1 = new BigDecimal[N+1];
    for(int k = 1; k <= N; k++){
      productOfStock1[k] = BigDecimal.ONE;
    }

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()));

      }

      productOfStock1[k] = productOfStock1[k].multiply(BigDecimal.valueOf(stockPrice[k][i]));

      System.out.println("Stock at [" + i + "] for N = " + N + "  and path number " + k + " …
Run Code Online (Sandbox Code Playgroud)

java bigdecimal

1
推荐指数
1
解决办法
303
查看次数

BigDecimal乘法返回0?

我是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]);


  }
  } …
Run Code Online (Sandbox Code Playgroud)

java bigdecimal

0
推荐指数
1
解决办法
361
查看次数

标签 统计

bigdecimal ×2

java ×2