抵押贷款计算返回负值

mortgage calc returning negatives

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

    import java.util.Scanner;

public class 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

第 2 年 -119738

第 3 年 -72104

第 4 年 4904

年 # 5 84261

第 6 年 21917

年 # 7 154073

年 # 8 -145664

第 9 年 63722

年#10

这到底是怎么回事?如果那里有古怪的小数或诸如此类的东西(即使我将其全部转换为整数),我可以得到,但是狄更斯将所有正输入都降低到零以下是什么?

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

因此,如果您的委托人是 P,则您用来表示它的 intP*100。如果你的利率是 I,你用来表示它的 int 就是 I*100.

所以现在你想计算 P*I。由于您将所有内容都表示为实际值的 100 倍,因此您可能希望获得值为 P*Iint *100。但是当你乘以你的两个 ints,P*100 和 I*100,结果是 P*I*10000 - 100 倍太高了。那是因为您将比例因子与值相乘。我可以看到你确实输出了thisYear / 10000,但是你没有改变thisYear。因此,当您继续执行循环时,您将获得高 10000 和 1000000 的值,依此类推,最终会溢出。 (我希望事情真的能那样运作,但不幸的是我不能说服我的银行使用你的算法。)

要进行调整,您需要将此结果除以 100。(我会先给它加上 50,这样当您除以 100 时结果就会四舍五入。)

看起来使用整数是构思不当。

我确实让它可以用较小的数字正确播放(最大的问题是不得不再次将本金增加 100 以在利息为 (p*100)*(i* 100) 否则它是 *100 被添加到 *10000 的利息中。可悲的是任何实际数量的钱(比如房子的 250000)在第一个循环之前溢出它。虽然 200000 一直到循环 30。

此外,利率并不总是百分之一,有时约为 .03875

我的代码缺乏确定长度的能力,即使它把它变成一个 int,并保持其他一切都像它一样(将一切乘以 100000)肯定是行不通的。

感谢社区不要叫我白痴!在 Youtube 等人上,我得到的答案会让我哭到角落!