抵押贷款计算返回负值
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
初始值为1411065408
年#一一: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,则您用来表示它的 int
是 P*100。如果你的利率是 I,你用来表示它的 int
就是 I*100.
所以现在你想计算 P*I。由于您将所有内容都表示为实际值的 100 倍,因此您可能希望获得值为 P*I 的 int
*100。但是当你乘以你的两个 int
s,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 等人上,我得到的答案会让我哭到角落!
我正在尝试处理金钱(就最佳实践而言,这可能是错误的方式,但我认为它会起作用..很简单,将所有内容乘以 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
初始值为1411065408
年#一一: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,则您用来表示它的 int
是 P*100。如果你的利率是 I,你用来表示它的 int
就是 I*100.
所以现在你想计算 P*I。由于您将所有内容都表示为实际值的 100 倍,因此您可能希望获得值为 P*I 的 int
*100。但是当你乘以你的两个 int
s,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 等人上,我得到的答案会让我哭到角落!