输入的工资的前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条答案
按热度按时间kmbjn2e31#
在对整数值进行除法运算时,请始终检查浮点除法-
10/100
将被Java整数除法术语0
所取代,10.0/100
对此进行了圆周运算。2skhul332#
要从某个东西中得到10%,要么除以
10.0
,要么乘以0.1
。但这里最大的问题是你不应该用double来表示钱,而应该用
BigDecimal
。为什么?只是为了好玩,让我们计算10%的税收超过
1500
?精度误差-〉很小,但它就在那里
0.0000000000001
。BigDecimal
拯救:Working example。
cgyqldqp3#
当你试图给双精度变量赋值时,你必须使用强制转换,而不是:
taxDue=15000*(10/100);
smt作为除数双精度值之一:
taxDue = 15000.0 *(10.0 / 100);