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:代码的行为与您现在描述的不一样[假设
一百分之一
定义正确],但您的代码还有另一个问题-请查看我的编辑以了解详细信息。