我正在努力处理金钱(就最佳做法而言可能是错误的方式,但我认为它会起作用..简单,将所有内容乘以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
初始值为1411065408
第一年: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(即使我把它全部投入到整数)但是狄更斯将所有正输入都降到零以下?
答案 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等人,我会得到答案,这会让我陷入困境!