我正在处理一些项目,但我无法找到以下代码的错误:
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
来检查值,但是这些值没有打印出来。
答案 0 :(得分:0)
如果if
块中的语句永远不会被执行,那意味着永远不会调用此方法,其中参数满足条件amt >= (tax*0.4)
。所以真正的问题是,你传递给这种方法的价值是什么?
答案 1 :(得分:0)
你的包围
if(amt>=(tax*0.4){
line在第一个)
括号之前缺少结束{
括号。确保检查包围并确保在选项菜单中打开了所有错误(如果可以的话)。
由于包围错误,此代码不应编译。检查Netbeans是否正在编译正确的项目,因为这应该在编译时发疯。
答案 2 :(得分:0)
在处理货币时,您应始终使用BigDecimal
类型,以避免double precision issues。
以下是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
之前添加了if
,以便您可以在测试发生之前查看值。