抵押贷款计算返回负面

时间:2016-04-13 04:27:11

标签: java bigdecimal currency

我正在努力处理金钱(就最佳做法而言可能是错误的方式,但我认为它会起作用..简单,将所有内容乘以100,然后使用整数)

    import java.util.Scanner;

公共课PFiveFifteen {

public static void main(String[] args) 
{   
    Scanner in =new Scanner(System.in);

    int i = 0;
    double principalIn;
    int duration=0;
    double interestRate=0;
    int thisYear = 0;
    int iInterestRate = 0;
    int iPrincipalIn = 0;

    System.out.println("Please input initial amount: ");
    principalIn = in.nextDouble(); 
    iPrincipalIn= (int) principalIn *100;
    //System.out.println(principalIn*100);

    System.out.println("Please input interest rate as a decimal: ");
    interestRate = in.nextDouble()*100; 
    iInterestRate = (int) interestRate;
    //System.out.println(interestRate*100);

    System.out.println("Please input duration of investment in years: ");
    duration = in.nextInt(); 
    //System.out.println(duration);

    while(duration > i ) {

        if ( i == 0) {
            //System.out.println("Preloop value" + (iInterestRate));
            thisYear = (iPrincipalIn * iInterestRate)+ iPrincipalIn;
            //System.out.println("Postloop value" + (iPrincipalIn));
            i++;
            System.out.println("The initial value is " + thisYear);
            System.out.println("Year # one one: " +i);
            }
        else

    thisYear = (thisYear*iInterestRate) + thisYear;
    i++;
    System.out.println(thisYear/10000);
    System.out.println("year # " +i);
    }

但是我在控制台中以某种方式获得负数

    Please input initial amount: 

10000

请输入小数的利率: 100.00

请输入投资期限: 10

初始值为141106540​​8

第一年:1 141106

#p>第二年 -119738

#p>第3年 -72104

#p>第4年 4904

#p>第5年 84261

#p>第6年 21917

#p>第7年 154073

#p>第8年 -145664

第9年 63722

年#10

世界上到底发生了什么?我可以得到,如果那里有重要的小数或soemthing(即使我把它全部投入到整数)但是狄更斯将所有正输入都降到零以下?

2 个答案:

答案 0 :(得分:1)

您将金额表示为整数的想法是可以的,但您必须非常小心缩放,尤其是当您乘以(或除)时。假设您从10美元的本金开始,您表示为1000.然后您输入0.06的利率(我假设用户输入实际利率而不是百分比,因此0.06表示6%)。然后你将其表示为6.

因此,如果您的校长是 P ,那么您用来表示它的int P * 100。如果您的利率是,那么您用来表示它的int I * 100。

所以现在你要计算 P * I 。由于您将所有内容表示为实际值的100倍,因此您可能希望获得int,其值为 P * I * 100。但是,当你将{em> P * 100和 I * 100的两个int相乘时,结果为 P * < em> I * 10000 - 因子100太高了。这是因为您将比例因子与值相乘。我可以看到您输出thisYear / 10000,但您没有更改thisYear。因此,当您继续循环时,您将获得10000以下的值,以及1000000太高的值,依此类推,最终您将溢出。 (我希望事情真的能以这种方式发挥作用,但遗憾的是我无法通知我的银行使用你的算法。)

要进行调整,您需要将此结果除以100.(我首先将其加50,这样当除以100时,结果将被舍入。)

答案 1 :(得分:0)

看起来像使用整数只是生病了。

我确实让它以较小的数字播放(最大的问题是必须再次将校长提高100以保持正确的占位符,当时的兴趣为(p * 100)*(i * 100)否则它是* 100被添加到* 10000的兴趣。可悲的是,任何现实的金额(比如房子说250000)在第一个循环之前溢出它。虽然200000使它一直循环30。

加上利率并不总是百分之一,有时它们就像.03875

我的代码缺乏确定长度的能力,即使它将其撞到一个int,并保留其他所有内容(将所有内容乘以100000)肯定不会起作用。

告诉社区不要称我为白痴!在Youtube等人,我会得到答案,这会让我陷入困境!