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です。

1年間で5%の利息が発生すると、1000は5000ではなく1050になります。

したがって、5%の場合:1.05^nおよび負の場合[-5%]:0.95^n

数値は整数ではないため、BigDecimalを使用してこれを行うことができます。

編集:[編集された質問への回答として]あなたの編集されたコードはあなたが与えた出力を生成しません[ONE_HUNDRED正しく初期化されていると仮定して]、しかしそれはまだ新しい問題を持っています:

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

2番目の反復を見てください。すでに設定されていprice = price * indexation^1
ます。もう一度[i==2]を掛けるとindexation^i、間違った結果が得られます。

解決策は次のいずれかです。

  1. ここで行う必要はありませんpow()。各反復にインデックスを掛けるだけです。
  2. オーバーライドせずprice、結果をprice.multiply(indexation.pow(i)新しい一時変数に保持し、それを出力します。
于 2012-02-15T11:01:42.167 に答える