我正在尝试制作一个程序,允许用户在考虑贷款时确定不同的方面。第一个等式应该确定每月支付的贷款金额,利率和月数。第二个等式用于确定在贷款金额,利率和每月付款的情况下,必须支付多少笔款(或月数)。这是我正在测试的代码,但我似乎无法获得有效的输出。
float amount = 20000;
float rate = (float) 7.5;
float months = 60;
float payment = 450;
float answer = (float) (((amount*(rate/1200))*(1+(Math.pow((rate/1200), months))))/((1+Math.pow((rate/1200), months))-1));
System.out.println(answer);
float answer2 = (log(payment/amount)-log((payment/amount)-(rate/1200)))/(log(1+(rate/1200)));
System.out.println(answer2);
对于第一个等式,我首先得到错误,因为它希望答案是双倍并且不断地告诉我,对于我的速率变量,我无法从double转换为float,所以我不得不放入强制转换。一旦我把错误消失了,我就会不断得到答案。
对于第二个等式,它一直说我不能除以零。有没有人知道任何解决方案。在线查看时,似乎我正确地制定了我的方程式,所以我不知道如何让它们工作。
另外,如果有人碰巧知道确定利率的好公式,那将会非常有用。
答案 0 :(得分:3)
你错过了一些演员阵容,而log
应该是Math.log
。当我将所有内容转换为double时(为什么你如此坚持使用浮点数?使用双精度意味着你不需要将这些转换放在任何地方)我得到以下输出:
无限
52.23012630649508
不确定第二个值应该是什么,但这似乎没问题;没有警告也没有错误。关于第一部分,你将除以零。试试这个:
System.out.println(Math.pow(rate/1200, months));
你会得到以下微小的数字
5.659799424266714E-133
浮点运算将导致分母为零,因为该值+1将失去精度,因此:
System.out.println(1+Math.pow(rate/1200, months)-1);
收益率0.0
和你的分母将导致第二个结果为无穷大。
答案 1 :(得分:2)
您不应将float / double或raw整数用作货币值,而是使用BigDecimal:http://download.oracle.com/javase/1.4.2/docs/api/java/math/BigDecimal.html
这使得不必执行强制双重>浮动转换,我希望错误消失。如果没有,请在新代码中添加评论。
答案 2 :(得分:0)
对于第二个等式:
float answer2 = (log(payment/amount)-log((payment/amount)-(rate/1200)))/(log(1+(rate/1200)));
唯一可能除以零是log(1+(rate/1200))
等于0
。
如果(rate/1200)
返回0
,则可以执行此操作。你可以通过将(rate/1200)
转换为浮动来解决这个问题。
因此:
float answer2 = (log(payment/amount)-log((payment/amount)-((float)(rate/1200))))/(log(1+((float)(rate/1200))));
我认为错误在于rate/1200
总是0
,因为1200
是一个整数,因此是除法的解决方案。