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

ca1c2owp  于 2023-04-10  发布在  Java
关注(0)|答案(3)|浏览(76)

输入的工资的前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 + "%%");

}

}
kmbjn2e3

kmbjn2e31#

在对整数值进行除法运算时,请始终检查浮点除法-10/100将被Java整数除法术语0所取代,10.0/100对此进行了圆周运算。

2skhul33

2skhul332#

要从某个东西中得到10%,要么除以10.0,要么乘以0.1

taxDue = 15000 * 0.1;

但这里最大的问题是你不应该用double来表示钱,而应该用BigDecimal
为什么?只是为了好玩,让我们计算10%的税收超过1500

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

// Taxes with double: 1500.1000000000001

精度误差-〉很小,但它就在那里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

cgyqldqp

cgyqldqp3#

当你试图给双精度变量赋值时,你必须使用强制转换,而不是:
taxDue=15000*(10/100);
smt作为除数双精度值之一:
taxDue = 15000.0 *(10.0 / 100);

相关问题