在找工资税时,我的Java程序输出了错误的答案

时间:2014-02-15 23:21:48

标签: java

输入的前20%的工资不征税。即20000 ..它将征收16000税,其中15000税率为10%,其余1000税率为20%,即1700总税。我的程序错误输出14500 ....

import java.util.*;
public class taxable {


    public static void main (String[] args) {
     Scanner in=new Scanner(System.in);

     System.out.println("Enter your salary:");
     double salary=in.nextDouble();
     double taxDue=0;
     double tempTaxDue=0;
     if (salary < 15000) {
     System.out.println("No tax applicable");
     }else if 
     (salary >=15000 && salary <20000) {
     taxDue=(15000*0.1);
     }else if 
     (salary >=20000 && salary <=35000) {
     tempTaxDue=(salary*0.8);
     taxDue=15000*0.1+tempTaxDue-15000*0.2;
     }else if
     (salary > 35000) {
     tempTaxDue=salary*0.8;
     taxDue=(15000*0.1)+(20000*0.2)+(tempTaxDue-35000*0.35);
     taxDue=(salary*0.8)+(20000*0.2)+(salary-35000*0.35);
     }
     System.out.printf("The amount of tax due is: " + taxDue + "    ");
     double avTaxRate;
     avTaxRate=taxDue/salary*100;
     System.out.printf("The average tax rate: " + avTaxRate + "%%");

}


}

3 个答案:

答案 0 :(得分:2)

当划分整数值时,总是检查浮点除法 - 10/100将是0的Java整数除法项,10.0/100包围它。

答案 1 :(得分:2)

要获得10%的收益,请将其除以10.0或乘以0.1

taxDue = 15000 * 0.1;

但这里最大的隐藏问题是你不应该使用双倍代表金钱。请改用BigDecimal

为什么呢?只是为了好玩,我们计算10%的税率超过15001

double dValue = 15001;
double dTaxes = 15001 * 0.1;
System.out.println("Taxes with double: " + dTaxes);

// Taxes with double: 1500.1000000000001

精度误差 - &gt;很小,但它有0.0000000000001

BigDecimal救援:

BigDecimal value = new BigDecimal("15001");
BigDecimal taxes = value.multiply(new BigDecimal("0.1"));
System.out.println("Taxes with BigDecimal: " + taxes);

// Taxes with BigDecimal: 1500.1

Working example

答案 2 :(得分:0)

当您尝试将双变量分配给某个分区时,您必须使用强制转换,而不是:

  

taxDue = 15000 *(10/100);

smt as make divisor double value:

  

taxDue = 15000.0 *(10.0 / 100);