0

我只是在做一些项目,但我找不到以下代码有什么问题:

double getInterest(double amt,double tax){  
        double diff=0;
        double refund=0;
        double interest=0;
        if(amt>=(tax*0.4)){
           diff=amt-(tax*0.4);
           System.out.println(" "+diff);  //This is not working.Nothing gets printed.
           refund=diff;                   //The value is not being assigned to refund.
        }                                 //refund remains to be 0 throughout.
         interest=diff*0.01*12;
         if(refund>0){
            JOptionPane.showMessageDialog(null,"Your refund is: "+refund);
         }
        return interest;
}

我无法找出代码中的任何错误。但它仍然没有完全工作。
错误以注释的形式在代码中给出。
有人帮我找出错误并解决这个问题吗?

我不知道为什么diff不打印的值以及为什么不将值diff分配给变量refund

我在 NetBeans 中工作,它没有给出任何类型的编译时错误。

我试图通过println同时使用diff和来检查这些值,refund但是这些值没有被打印出来。

4

3 回答 3

0

BigDecimal处理货币时应始终使用类型以避免双精度问题

这是重写的代码BigDecimal

BigDecimal getInterest(final BigDecimal amount, final BigDecimal tax) {
    BigDecimal diff = BigDecimal.ZERO;
    BigDecimal refund = BigDecimal.ZERO;
    BigDecimal reducedTax = new BigDecimal("0.4").multiply(tax);
    System.out.println("Amount is " + amount + ". Tax times 0.4 is " + tax + ".");
    if (amount.compareTo(reducedTax) >= 0) {
        diff = amount.subtract(reducedTax);
        System.out.println(diff);
        refund = diff;
    }
    BigDecimal interest = diff.multiply(new BigDecimal("0.01")).multiply(new BigDecimal("12"));
    if (refund.compareTo(BigDecimal.ZERO) > 0) {
        JOptionPane.showMessageDialog(null, "Your refund is: " + refund);
    }
    return interest;
}

是的,我知道它更丑陋。它也会慢很多。但它是新的正确的。

关于您的问题,大概代码没有输入,if因为amount不大于tax * 0.4- 如果您确定它是那么也许您已经遇到了双精度问题。

println在 the 之前添加了一个,if这样您就可以在测试发生之前看到这些值是什么。

于 2013-04-12T16:03:20.303 回答
0

好吧,如果块中的语句if从不执行,这意味着在参数满足条件的情况下永远不会调用此方法amt >= (tax*0.4)。所以真正的问题是,你传递给这个方法的值是什么?

于 2013-04-12T15:55:25.380 回答
0

您的括号在第 一个括号之前if(amt>=(tax*0.4){ 缺少一个右括号。确保检查包围并确保在选项菜单中打开了所有错误(如果可以)。){

由于括号错误,此代码不应编译。检查 Netbeans 是否正在编译正确的项目,因为这应该在编译时发疯。

于 2013-04-12T15:55:46.883 回答