这是代码,由于将0.993舍入到1.0,它提供了无限输出 双倍数量= 100; double intrest = 8.5; 双重qu = = 21/3; double first = intrest / 400 + 1; double secound =( - 1/3);
double monthpayment = amount * ((Math.pow(intrest / 400 + 1, quaters) - 1) / (1-(Math.pow(intrest / 400 + 1,(-1/3)))));
System.out.println(monthpayment);
答案 0 :(得分:1)
你正在获得无限,因为你将数字除以零。 1-(Math.pow(intrest / 400 + 1,(-1/3)))
的值为0
以下是调试代码:
public class Round {
public static void main(String args[]){
double intrest=8.5;
double quaters =21.0 / 3.0;
double first=intrest / 400.0 + 1 ;
double secound=(-1.0/3.0);
double amount=100.0;
System.out.println("intrest"+intrest);
System.out.println(secound);
System.out.println(quaters);
System.out.println(first);
System.out.println(Math.pow(intrest / 400 + 1, quaters) - 1);
System.out.println(1-(Math.pow(intrest / 400 + 1,(-1/3))));
double monthpayment = amount * ((Math.pow(intrest / 400 + 1, quaters) - 1) / (1-(Math.pow(intrest / 400 + 1,(-1/3)))));
System.out.println(monthpayment);
}
}
以下是每行的输出:
intrest8.5
-0.3333333333333333
7.0
1.02125
0.15857589055432686
**0.0**
Infinity
看到你将它除以零,因此你得到了无限。
如果您不想要无限,则可以进行以下更改:
double monthpayment = amount * ((Math.pow(intrest / 400 + 1, quaters) - 1) / (1-(Math.pow(intrest / 400 + 1,((double)-1/3)))));
现在值(1-(Math.pow(intrest / 400 + 1,((double)-1/3))))
将是0.006984615789001336
而不是0
答案 1 :(得分:1)
你面临的问题是-1/3,因为它返回0,
那是因为当你没有另外指定时,1和3被视为整数,所以-1/3计算为整数0,然后将其强制转换为double 0. try(-1.0 / 3),或者可能是-1D / 3
任何提升到幂零的值都具有1的数值。 这就是你为表达式
获得1的价值的原因Math.pow(intrest / 400 + 1,(-1/3))
只需用
替换它Math.pow(intrest / 400 + 1,((double)-1/3))
最终表达
double monthpayment = amount * ((Math.pow(intrest / 400 + 1, quaters) - 1) / (1-(Math.pow(intrest / 400 + 1,((double)-1/3)))));
System.out.println(monthpayment);
,请参阅此处
答案 2 :(得分:0)
设置双打和分割时请确保使用3.0而不是3(将所有值设置为浮点数,包括100.00,以及其他任何值)。
即使你的变量类型是double,你的div类型也会导致一轮错误。
试试我可能是错的。