输入的前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 + "%%");
}
}
答案 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
答案 2 :(得分:0)
当您尝试将双变量分配给某个分区时,您必须使用强制转换,而不是:
taxDue = 15000 *(10/100);
smt as make divisor double value:
taxDue = 15000.0 *(10.0 / 100);