根据收入 计算免税收入 实缴税额 以及实发金额等信息
public class RateUtils {
/**
* 计算居民身份证稿酬所得税
* @param settleMoney 收入
* @return
*/
public static Double getRateMoney(Double settleMoney) {
String s = String.format("%.2f", settleMoney);
double res = Double.parseDouble(s);
//费用
Double cost = 800.00;
//免税收入
Double noRateMoney = 0.00;
//应纳税所得额
Double assInCome = 0.00;
//税率(%)
Double rate = 0.2;
//抵免境外税额
Double foreignTaxcredit = 0.00;
// 实缴税额
Double payTax = 0.00;
//实发金额
Double payMoney = 0.00;
if (settleMoney > 4000) {
cost = get2fDouble(settleMoney * 0.2);
}
if (settleMoney > cost) {
noRateMoney = get2fDouble((settleMoney - cost) * 0.3);
}
if ((settleMoney - cost - noRateMoney) > 0) {
assInCome = get2fDouble(settleMoney - cost - noRateMoney);
}
payTax = get2fDouble(assInCome * rate);
payMoney = get2fDouble(settleMoney - payTax);
return payTax;
}
/**
* 计算非居民身份证稿酬所得税
* @param settleMoney 收入
* @return
*/
public static Double getNoChinaRateMoney(Double settleMoney) {
String s = String.format("%.2f", settleMoney);
double res = Double.parseDouble(s);
//费用
Double cost = 0.00;
//免税收入
Double noRateMoney = 0.00;
//应纳税所得额
Double assInCome = 0.00;
//税率(%)
Double rate = 0.03;
//速算扣除数
Double quickCalc = 0.00;
// 实缴税额
Double payTax = 0.00;
// 实发金额
Double payMoney = 0.00;
///计算费用
cost = get2fDouble(settleMoney * 0.2);
///计算免税收入
noRateMoney = get2fDouble((settleMoney - cost) * 0.3);
//计算应纳所得额
assInCome = get2fDouble(settleMoney - cost - noRateMoney);
///税额计算 =IF(J18<=3000,3%,IF(J18<=12000,10%,IF(J18<=25000,20%,IF(J18<=35000,25%,IF(J18<=55000,30%,IF(J18<=80000,35%,45%))))))
if (assInCome <= 3000) {
rate = 0.03;
} else if (assInCome <= 12000) {
rate = 0.1;
} else if (assInCome <= 25000) {
rate = 0.2;
} else if (assInCome <= 35000) {
rate = 0.25;
} else if (assInCome <= 55000) {
rate = 0.3;
} else if (assInCome <= 80000) {
rate = 0.35;
} else {
rate = 0.45;
}
///计算速算扣除数 =IF(K18=3%,0,IF(K18=10%,210,IF(K18=20%,1410,IF(K18=25%,2660,IF(K18=30%,4410,IF(K18=35%,7160,IF(K18=45%,15160)))))))
if (rate == 0.03) {
quickCalc = 0.0;
} else if (rate == 0.1) {
quickCalc = 210.0;
} else if (rate == 0.2) {
quickCalc = 1410.0;
} else if (rate == 0.25) {
quickCalc = 2660.0;
} else if (rate == 0.3) {
quickCalc = 4410.00;
} else if (rate == 0.35) {
quickCalc = 7160.0;
} else if (rate == 0.45) {
quickCalc = 15160.0;
}
///实缴税额 ROUND(J18*K18-L18,2)
payTax = get2fDouble(assInCome * rate-quickCalc);
payMoney = get2fDouble(settleMoney - payTax);
return payTax;
}
private static Double get2fDouble(Double doubleNum) {
String s = String.format("%.2f", doubleNum);
return Double.parseDouble(s);
}
}