1

我只是找不到正确的答案,所以这是我的问题:我希望能够计算a和的索引(正或负百分比)。priceperiod

期望:


案例 #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

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

以负百分比计算超过 5 年:

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

结果:


这个负百分比出错了,因为我的 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());
}

解决方案:

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);
 }
}
4

1 回答 1

2

你应该乘以1 + percents/100,1% 是 1/100。

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

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

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

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

  price = price.multiply(indexation.pow(i));
  System.out.println(price.intValue());

看看第二次迭代,你已经设置了price = price * indexation^1
当你再次将它与indexation^i[i==2] 相乘时,你会得到错误的结果!

解决方案可能是其中之一:

  1. 不需要在pow()这里,只需将每次迭代与索引相乘即可。
  2. 不要覆盖price,将结果保存price.multiply(indexation.pow(i)在一个新的临时变量中 - 并打印它。
于 2012-02-15T11:01:42.167 回答