我之前没有使用过java,我很困惑为什么我写的一个简单的现值计算器不起作用。现值公式由于某种原因返回一个超小数?看看你是否能发现我的错误:
// Import all utilities
import java.text.DecimalFormat;
import java.util.*;
// Base class
public class Project2
{
// Main function
public static void main(String[] args)
{
// Define variables
double p = 0.0;
double f = 0.0;
double r = 0.0;
double n = 0.0;
String another = "Y";
// Create a currency format
DecimalFormat dollar = new DecimalFormat("#,###.00");
// Create a new instance of the scanner class
Scanner keyboard = new Scanner(System.in);
// Loop while another equals "Y"
while(another.equals("Y"))
{
// Get future value
System.out.println("Future value: ");
f = Double.parseDouble(keyboard.nextLine());
// Get annual interest rate
System.out.println("Annual interest rate: ");
r = Double.parseDouble(keyboard.nextLine());
// Get Number of years
System.out.println("Number of years: ");
n = Double.parseDouble(keyboard.nextLine());
// Run method to find present value and display result
p = presentValue(f, r, n);
System.out.println("Present value: $" + p );
// Ask if user wants to enter another
System.out.println("Enter another?(Y/N) ");
another = keyboard.nextLine().toUpperCase();
}
}
public static double presentValue(double f, double r, double n)
{
// Do math and return result
double p = f / Math.pow((1 + r), n);
return p;
}
}
答案 0 :(得分:1)
假设您输入R为% per annum
,例如R = 4.3%
,您可能希望将函数修改为:
double p = f / (Math.pow((1 + (r/100.0)), n));
return p;
如果这不是您想要的,您可能需要输入R=4.3% p.a
的值
4.3/100 = 0.043
而不是 4.3
。
答案 1 :(得分:0)
而不是未来的价值请为Principal接受输入。
您的PresentValue计算功能将如下所示。试试这个功能,希望你能得到完美的结果
public double presentValue(double principal, double yearlyRate, double termYears)
{
// Do math and return result
double pValue = principal * (((1- Math.pow(1 + yearlyRate, -termYears))/ yearlyRate));
return pValue;
}
答案 2 :(得分:-2)
Math.pow期望第一个参数是基数,第二个参数是指数。 (见The Math javadoc)
在你的程序中,第一个参数是权力,第二个参数是基础。
将其改为双倍p = f / Math.pow(n,(1 + r));我希望你的程序按预期运行
答案 3 :(得分:-2)
您的程序运行正常。我刚试过它。
Future value:
100000
Annual interest rate:
0.4
Number of years:
20
Present value: $119.519642774552
Enter another?(Y/N)
Y
Future value:
100000
Annual interest rate:
40
Number of years:
20
Present value: $5.550381891760752E-28
Enter another?(Y/N)
你可能错误地输入了利率。
如果要输入整数值,可以修改公式:
double p = f / (Math.pow((1 + (r/100.0)), n));
这将导致:
Future value:
100000
Annual interest rate:
40
Number of years:
20
Present value: $119.519642774552
Enter another?(Y/N)