Java 计算误差

Java 计算误差,java,Java,我的程序一直有问题。我应该输入3个变量,然后把它们插入一个公式中,得到一个答案。我的答案是0.0,我不确定我做错了什么 public double compute_cert (int years, double amount, double rate, double certificate) { certificate = amount * Math.pow(1 + rate/100, years); return certificate; } 变量rate、amount和ye

我的程序一直有问题。我应该输入3个变量,然后把它们插入一个公式中,得到一个答案。我的答案是0.0,我不确定我做错了什么

public double compute_cert (int years, double amount, double rate, double certificate)
{
    certificate = amount * Math.pow(1 + rate/100, years);
    return certificate;
}
变量rate、amount和year设置正确,但应答证书始终返回为0.0

public static void main(String[] args)
{
    int years = 0;
    double amount = 0;
    double rate = 0;
    double certificate = 0;
    char ans;// allows for char 

    do{
        CDProgram C = new CDProgram(years, amount, rate, certificate);
        C.get_years();
        C.get_amount();
        C.get_rate();
        C.get_info();
        C.compute_cert(years, amount, rate, certificate);
        System.out.println ("Would you like to repeat this program? (Y/N)");
        ans = console.next().charAt(0);// user enters either Y or y until they wish to exit the program
   } while(ans == 'Y'||ans == 'y'); // test of do/while loop

}

不知道还能做什么。感谢您的帮助

看起来您没有为传递到计算函数中的局部变量赋值

   years = C.get_years();
   amount = C.get_amount();
   rate = C.get_rate();
   info = C.get_info();
实际上,代码只是将每个参数的
0
传递到函数中。乘以
0
将得到
0
。如果您通过
0
,则下一行将
0
乘以某个数量

certificate = amount * Math.pow(1 + rate/100, years);

看起来您的
CDProgram
类中有
年份
金额
利率
字段,您的
获取
方法正在提示用户输入值

在这种情况下,将它们的参数传递到计算方法中是没有意义的。我会把方法改成这个

public double compute_cert () {
    certificate = amount * Math.pow(1 + rate/100, years);
    return certificate;
}

然后,当您在
main
中调用它时,不要传入任何值。这将只使用
CDProgram
类中字段的值。

@jeroenvanevel-
rate
是一个双精度,双精度除以整数得到一个双精度。所以100和100.0之间的差异在这里是完全不相关的。@DavidWallace:你说得对,我错了。只是一点补充:搜索按值传递/按引用传递以获取更多信息我让这些变量返回一些值,这意味着当我调用数学函数时,它们应该以0插入方程中。我使用了这个方法,对变量证书也使用了同样的方法,但仍然不走运。@NJD,在您调用
compute\u cert
时,如果您为每个参数传递
0
,它将使用
0
,因为局部变量(本例中的函数参数)始终对具有相同名称的所有全局变量进行阴影处理。