3

我以前没有使用过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;
   }
}
4

4 回答 4

1

假设您输入 R 作为% per annumie for eg R = 4.3%,您可能希望将函数修改为:

double p = f / (Math.pow((1 + (r/100.0)), n));
return p;

如果这不是您想要的,您可能需要输入R=4.3% p.aas

4.3/100 = 0.043 而不是 4.3

于 2013-10-21T05:14:04.957 回答
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;
}
于 2016-04-18T03:21:38.033 回答
-2

Math.pow 期望第一个参数是基数,第二个是指数。(参见数学 javadoc

在你的程序中,第一个参数是幂,第二个是基数。

将其更改为 double p = f / Math.pow(n, (1 + r)); 我希望您的程序按预期运行

于 2013-10-21T04:57:49.500 回答
-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) 
于 2013-10-21T05:05:15.777 回答