简单的Java现值计算器无法正常工作

时间:2013-10-21 04:30:06

标签: java

我之前没有使用过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 个答案:

答案 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)