【问题标题】:Calculating future investment amount in Java用Java计算未来的投资额
【发布时间】:2015-05-27 01:44:46
【问题描述】:

我正在尝试计算 Java 的未来投资金额。 我的程序运行,但它没有给我正确的答案。

如果

  • 投资金额为1000.56,
  • 利率为4.25,
  • 年数为 1,
  • 答案应该是 1043.92 美元。

我们必须使用的公式是futureInvestmentValue = investmentAmount * (1 + monthlyInterestRate) ^ numberOfYears * 12

下面是我的课

// Import Java Scanner
import java.util.Scanner;
public class Ex_2_21 {
    public static void main(String[] args) {
        //Create a Scanner object
        Scanner input = new Scanner(System.in);

        //Prompt the user to enter investment amount, annual interest rate, and number of years
        System.out.println("Enter investment amount:");
        System.out.println("Enter annual interest rate:");
        System.out.println("Enter number of years:");
        float investmentamount = input.nextFloat();
        float interestrate = input.nextFloat();
        float numberofyears = input.nextFloat();
        float years = numberofyears * 12;

        //Formula to calculate the accumulated value

        float futureInvestmentValue = (float) (investmentamount * Math.pow((years), 1 + interestrate));

        //Print result
        System.out.println("The accumulated value is " + futureInvestmentValue);
    }
}

【问题讨论】:

    标签: java floating-point finance


    【解决方案1】:

    除了@Luiggi 所说的,您是否考虑过如果是 4.25 利率,即 425% 利率,您想要的是 1 + 0.0425

    【讨论】:

    • 是的,利率应该是百分比。我确实输入了 0.0425 作为利率,它确实给了我正确的答案。谢谢你:)
    【解决方案2】:

    当您的意思是月时,您使用的是年(等于年 * 12),而您根本没有使用月利率。将年利率(输入的)除以 12 以获得月利率(并确保它是一个分数,而不是一个百分比,因此如果他们输入 4.25,则需要除以 100 以获得 0.0425),并且为总月持续时间引入一个新变量。然后(正如 Luiggi 所说)交换参数顺序。

    float futureInvestmentValue = (float) (investmentAmount * Math.pow(1 + monthlyInterestRate, months));
    

    【讨论】:

    • @JY:如果答案对您有用,您可能应该点击那里的那个小复选标记。 ;)
    【解决方案3】:

    问题来了:

    Math.pow((years), 1 + interestrate)
    

    应该是

    Math.pow(1 + interestrate, years)
    

    Math#pow(double a, double b)中所述:

    参数:
    a - 底
    b - 指数

    退货
    值 ab

    【讨论】:

    • 谢谢路易吉。我已将代码更改为您建议的代码,它确实让我更接近正确答案,但它仍然给我错误的答案。这很有帮助。
    • 可能它不起作用,因为您直接使用浮点数,这可能会产生奇怪的结果。最好使用BigDecimal 而不是float
    【解决方案4】:

    上面给出的Java程序有两个问题:

    1. 缺乏对问题的理解(请善待这个建议。如果我们正确理解问题,我们就非常接近正确的编程解决方案。)

    未来投资价值(A)的公式如下:

    a) 每年复利:

    A = P*(1+R)^N

    其中,A = 终值,P = 初始投资金额,R = 利率(以 % 表示,在计算中用作 R/100),N = 应用复合利率的时间段(以年为单位)

    b) 每月复利:

    A = P*(1+(R/12))^(N*12)

    其中,A = 终值,P = 初始投资金额,R = 月利率(以 % 表示,在计算中使用 R/100,它不是年利率),N = 复利的时间段应用率(以年为单位)

    根据给定样本问题的值,我们发现为了计算未来的投资价值,我们应该使用公式(b)。

    所以,w.r.t 上面给定的 Java 程序,为了合并这个更正,我们需要在利率变量声明行之后简单地添加一条语句:

    利率 = 利率 / (100 * 12);

    1. 第二个问题是对 Java 编程语言结构缺乏理解/由于无知导致的逻辑错误。无论如何;不要紧。从技术上讲,这是一个编程错误,因此需要纠正。

    正如上面 Luiggi Mendoza 所建议的,在 Java 编程语言中,如果我们想表达数学表达式 A^B,那么我们必须使用 java.lang.Math.pow() 方法,语法如下:

    public static double pow(double A, double B)

    因此,同样w.r.t 上面给出的Java 程序,要合并第二次更正,我们必须简单地更正声明futureInvestmentValue 变量的行并使用Math.pow() 方法;如下:

    float futureInvestmentValue = (float) (investmentamount * Math.pow(1 + interestrate, years));

    结合这两个更正,我们使我们的解决方案正确。基于 GIGO (Garbage In Garbage Out, Gold In Gold Out) 的原则,我们一定会在给定值的任何示例问题上得到正确和准确的答案;正如预期的那样。

    快乐编程。

    【讨论】:

      猜你喜欢
      • 2021-10-06
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-02
      • 2020-09-27
      • 1970-01-01
      • 2021-04-22
      • 1970-01-01
      相关资源
      最近更新 更多