【发布时间】:2016-04-13 04:27:11
【问题描述】:
我正在尝试处理金钱(就最佳实践而言可能是错误的方式,但我认为它会起作用。它很简单,将所有内容乘以 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
第 2 年 -119738
第 3 年 -72104
第 4 年 4904
第 5 年 84261
第 6 年 21917
第 7 年 154073
第 8 年 -145664
第 9 年 63722
第 10 年
这里到底发生了什么?如果那里有古怪的小数或某些东西(即使我将其全部转换为整数),我可以得到,但是狄更斯将所有正输入都降至零以下??
【问题讨论】:
-
stackoverflow.com/questions/24223440/… 不是和这个有关吗?
-
你溢出了整数,Java 中的最大值是 2,147,483,647。一旦溢出,我认为它只会变成负数或其他东西,我知道这很奇怪......如果你需要非常大的数字,你可以使用 BigInteger 类。
-
即使是小数值也会破坏它: 请输入初始金额:10000 请输入小数形式的利率:0.05 请输入投资期限(年):10 初始值为6000000年#一一: 1 600 年 # 2 3600 年 # 3 21600 年 # 4 129600 年 # 5 -81393 年 # 6 -58864 年 # 7 76312 年 # 8 28378 年 # 9 170272 年 # 10
-
我尝试格式化它,但评论不会像我上面那样做。
-
我不认为我正在做的数学运算,10000 超过 10 个循环的 5% 的复利会超过 int 允许的最大值。某处它继续将利息乘以 100,但我不知道那会在哪里。
标签: java bigdecimal currency