Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/365.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 负数的BigDecimal.pow()_Java_Bigdecimal_Exponentiation - Fatal编程技术网

Java 负数的BigDecimal.pow()

Java 负数的BigDecimal.pow(),java,bigdecimal,exponentiation,Java,Bigdecimal,Exponentiation,我只是找不到正确的答案,所以我的问题是:我希望能够计算价格和期间的指数化(正或负百分比) 期望值: static final BigDecimal ONE_HUNDRED = new BigDecimal("100"); public static void main(String[] args) { BigDecimal percentageValue = new BigDecimal("-5"); BigDecimal indexation = percentageValue.divid

我只是找不到正确的答案,所以我的问题是:我希望能够计算
价格
期间
的指数化(正或负百分比)

期望值:

static final BigDecimal ONE_HUNDRED = new BigDecimal("100");
public static void main(String[] args)
{
 BigDecimal percentageValue = new BigDecimal("-5");
 BigDecimal indexation = percentageValue.divide(ONE_HUNDRED).add(BigDecimal.ONE);
 BigDecimal price = new BigDecimal("1000");

 for (int i = 0; i < 5; i++)
 {
   BigDecimal result = price.multiply(indexation.pow(i));
   System.out.println(result);
 }
}

案例#1
价格:1.000,00
指数化百分比:5%

以正百分比计算5年:

1. 1000 x 5^0 = 1000
2. 1000 x 5^1 = 1050
3. 1000 x 5^2 = 1102,50
4. 1000 x 5^3 = 1157.625
5. 1000 x 5^4 = 1215,50625
1. 1000 x -5^0 = 1000
2. 1000 x -5^1 = 950
3. 1000 x -5^2 = 902,50
4. 1000 x -5^3 = 857,375
5. 1000 x -5^4 = 814,50625
案例2
价格:1.000,00
指数化百分比:-5%

5年以上负百分比计算:

1. 1000 x 5^0 = 1000
2. 1000 x 5^1 = 1050
3. 1000 x 5^2 = 1102,50
4. 1000 x 5^3 = 1157.625
5. 1000 x 5^4 = 1215,50625
1. 1000 x -5^0 = 1000
2. 1000 x -5^1 = 950
3. 1000 x -5^2 = 902,50
4. 1000 x -5^3 = 857,375
5. 1000 x -5^4 = 814,50625
结果:

static final BigDecimal ONE_HUNDRED = new BigDecimal("100");
public static void main(String[] args)
{
 BigDecimal percentageValue = new BigDecimal("-5");
 BigDecimal indexation = percentageValue.divide(ONE_HUNDRED).add(BigDecimal.ONE);
 BigDecimal price = new BigDecimal("1000");

 for (int i = 0; i < 5; i++)
 {
   BigDecimal result = price.multiply(indexation.pow(i));
   System.out.println(result);
 }
}

这个负的百分比是错误的,因为我的java代码会打印出来:

1000
-5000
-125000
15625000
1175690408
我的代码非常简单,我认为:

BigDecimal percentageValue = new BigDecimal("-5");
BigDecimal indexation = percentageValue.divide(ONE_HUNDRED).add(BigDecimal.ONE);
BigDecimal price = new BigDecimal("1000");

for (int i = 0; i < 5; i++)
{
  price = price.multiply(indexation.pow(i));
  System.out.println(price.intValue());
}
BigDecimal percentageValue=新的BigDecimal(“-5”);
BigDecimal指数化=百分比值。除以(一百)。加(BigDecimal.1);
BigDecimal价格=新的BigDecimal(“1000”);
对于(int i=0;i<5;i++)
{
价格=价格乘以(指数化pow(i));
System.out.println(price.intValue());
}
解决方案:

static final BigDecimal ONE_HUNDRED = new BigDecimal("100");
public static void main(String[] args)
{
 BigDecimal percentageValue = new BigDecimal("-5");
 BigDecimal indexation = percentageValue.divide(ONE_HUNDRED).add(BigDecimal.ONE);
 BigDecimal price = new BigDecimal("1000");

 for (int i = 0; i < 5; i++)
 {
   BigDecimal result = price.multiply(indexation.pow(i));
   System.out.println(result);
 }
}
static final BigDecimal ONE_100=新的BigDecimal(“100”);
公共静态void main(字符串[]args)
{
BigDecimal percentageValue=新的BigDecimal(“-5”);
BigDecimal指数化=百分比值。除以(一百)。加(BigDecimal.1);
BigDecimal价格=新的BigDecimal(“1000”);
对于(int i=0;i<5;i++)
{
BigDecimal结果=price.multiply(指数化.pow(i));
系统输出打印项次(结果);
}
}

你应该乘以
1+百分比/100
,1%是1/100

请注意,一年内5%的利息使1000变为1050,而不是5000

所以对于5%:
1.05^n
和负[-5%]:
0.95^n

您可以使用来执行此操作,因为numebr不是整数

EDIT:[作为对编辑问题的回应]您编辑的代码不会产生您给出的输出[假设
100
正确初始化],但是它仍然有一个新问题:

  price = price.multiply(indexation.pow(i));
  System.out.println(price.intValue());
看看第二次迭代,您已经设置了
price=price*指数化^1

当你用
指数化^i
[i==2]再次乘以它时,你会得到一个错误的结果

解决方案可以是以下之一:

  • 这里不需要
    pow()
    ,只需将每次迭代乘以索引即可
  • 不要覆盖
    price
    ,将
    price.multiply(indexization.pow(i)
    的结果保存在一个新的临时变量中,并将其打印出来

  • 抱歉,我忘了在我收集百分比值的地方发布代码:percentageValue.divide(一百分之一)。add(BigDecimal.ONE)@adis:代码的行为与您现在描述的不一样[假设
    一百分之一
    定义正确],但您的代码还有另一个问题-请查看我的编辑以了解详细信息。