我找不到正确的答案,所以这是我的问题:我希望能够计算price
和{{的指数化(正或负百分比) 1}}。
期望:
案例#1
价格: 1.000,00
指数百分比: 5%
以正百分比计算5年以上:
period
案例#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
结果:
这个负百分比出错了,因为我的java代码打印出来了:
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
我认为我的代码非常简单:
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());
}
答案 0 :(得分:2)
您应该乘以1 + percents/100
,1%是1/100。
请注意,一年内5%的注意力使1000变为1050而不是5000
所以5%:1.05^n
和负[-5%]:0.95^n
您可以使用BigDecimal来执行此操作,因为数字不是整数。
编辑:[作为对编辑问题的回复] 您的编辑代码不会产生您给出的输出[假设ONE_HUNDRED
已正确初始化],但它仍有一个新问题:< / p>
price = price.multiply(indexation.pow(i));
System.out.println(price.intValue());
查看第二次迭代,您已设置price = price * indexation^1
当你再次乘以indexation^i
[i == 2]时会得到错误的结果!
解决方案可能是其中之一:
pow()
,只需将每次迭代乘以索引。price
,将price.multiply(indexation.pow(i)
的结果保存在新的临时变量中 - 然后将其打印出来。