新个税计算html、以及java源代码

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/whandgdh/article/details/86304823

前言

2019年1月1日起,新个税改革正式全面实施,个税按照年累计的方式计算,个税改革与大家工资息息相关,所以闲来无事用jsp和java代码实现新个税计算。

一、html格式

直接用html格式的话,不用服务器部署,直接浏览就可以打开了。请忽略格式,代码如下:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>
  <head>
    <base href="<%=basePath%>">
    <title>个人所得税计算器</title>
	 <script>
 	window.	quickRateText = '{"3":0,"10":2520,"20":16920,"25":31920,"30":52920,"35":85920,"45":181920}'; 
 	//全局变量速算扣除数据
	window.quickRate = window.JSON.parse(quickRateText);
	window.rateText = '{"3":36000,"10":144000,"20":300000,"25":420000,"30":660000,"35":960000,"45":999999999}'; 
	//全局变量税率
	window.rate = window.JSON.parse(rateText);
     function cal(){//开始计算
     var arr=new Array();
     arr[0]= document.getElementById("TaxSalary").value;
     arr[1]= document.getElementById("Insurance").value;
     arr[2]= document.getElementById("Special").value;
     arr[3]= document.getElementById("Month").value;
	  	for (var i=0;i<arr.length;i++)
	  	{
	  			checkdata(arr[i]);//数据校验
	  	}
	  	CheckMonth(arr[3])	;//月份校验							
	  	var totalPay=0;//缴税累计金额
	  	var taxPay=0;//本月应缴税额
	  	document.getElementById("result").innerHTML="";//清空计算结果
	    for(var i=1;i<=arr[3];i++){
	   			var TaxMoney=(arr[0]-arr[1]-arr[2]-5000)*i;	
	   			if(TaxMoney<0){ //不用交税
	   			 	document.getElementById("result").innerHTML+="<p>恭喜你!!!你不用交税哦!!!!</p>";
	   			 	return;
	   			}
 	   			var taxRateString=getTaxRate(TaxMoney);
 	    		var taxRate=taxRateString/100;
	        	var quickData= quickRate[taxRateString];
	        	totalPay=totalPay+taxPay;
	            taxPay=TaxMoney*taxRate-quickData-totalPay;
 	   			document.getElementById("result").innerHTML+="<p>第"+i+"月: 应交税额: "+TaxMoney.toFixed(2)+" 适应税率: "+taxRate+" 速算扣除数: "+quickData+ " 往月缴税金额: "+totalPay.toFixed(2)+" 本月应缴税额: "+taxPay.toFixed(2)+"</p>";
	   }
	  	 
      }
function getTaxRate(value) {//根据需要交税的金额获取相应的税率
	if(value<0) return 0;
	for (var prop in rate){  
		if(value<=rate[prop]) 
			return    prop ;
 		}
	}
function checkdata(value){
		CheckIsNull(value);
      	if (isNaN(value)) {//用isNaN开始判断,如果成立就是非数字
    			alert("请输入正确的数值");
    			return false;
   						} 
   		var len1 = value.substr(0,1);
    	var len2 = value.substr(1,1);
    	//如果第一位是0,第二位不是点,就用数字把点替换掉
    	if(value.length > 1 && len1==0 && len2 != '.'){
    			alert("请输入正确的数值");
    			return false;	
     	}
 		if(value<0){
 				alert("请输入大于或者等于0的正确的数值");
    			return false;
 		}
        }
function checkdata_Onblur(obj){//输入框失去焦点数据校验
		var value=obj.value;
 		CheckIsNull(value);
 		 if (isNaN(value)) {//用isNaN开始判断,如果成立就是非数字
    			alert("请输入正确的数值");
    			return false;
   						}
	
    	var id= obj.id;
     	if(id=="Month"){
     	 	CheckMonth(value);
     	}
     	var len1 = value.substr(0,1);
    	var len2 = value.substr(1,1);
    	//如果第一位是0,第二位不是点,就用数字把点替换掉
    	if(value.length > 1 && len1==0 && len2 != '.'){
    			alert("请输入正确的数值");
    			return false;	
     	}
 		if(value<0){
 				alert("请输入大于或者等于0的正确的数值");
    			return false;
 		}
	}	
function CheckMonth(value){//月份校验
	var len1 = value.substr(0,1);
  	if(value.length >= 1 && len1==0 ){
     	  	alert("请输入正确的月份");
     	  	return false;
     	  }
    if(value.indexOf(".")>0){
     	  	alert("月份不能是小数,请重新输入正确的月份");
     	  	return false;
     	  }
    
       						}
function CheckIsNull( value){//非空校验
      if (value==null||value==""){
  	 		alert( "数据不能为空!请重新输入");
  	 		return false;
  	 	}
      }
</script>
  </head>
  
  <body>
  	<div style="text-align:center"><p><span style="display:inline-block;width:250px;text-align:right; margin:0px 200px">个税计算器</span>  </p></div>
  <form action="form_action.asp" method="get">
   <div style="text-align:center"> <p><span style="display:inline-block;width:250px;text-align:right;">每月税前工资:</span><input   id="TaxSalary" onblur="checkdata_Onblur(this)" name="TaxSalary" required /> </p>
   	<p><span style="display:inline-block;width:250px;text-align:right;">五险一金扣除金额:</span><input   id="Insurance"  onblur="checkdata_Onblur(this)" name="Insurance" /> </p>
   	<p><span style="display:inline-block;width:250px;text-align:right;">专项扣除金额:</span><input   id="Special"  onblur="checkdata_Onblur(this)" name="Special" /> </p>
   	<p><span style="display:inline-block;width:250px;text-align:right;">月份(1-12):</span><input   id="Month" onblur="checkdata_Onblur(this)" name="Month" /> </p>
   	<p><button style="margin:100px"type="button" onclick="cal()">开始计算</button> </p> 
   </div>
   	<div  style="text-align:center" id="result"></div>
 </form>
   </body>
</html>

效果如下:
在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

可以看到,月薪1w有专项扣除和没有专项扣除交税情况差别还是挺大的。

二、java代码

import java.util.Scanner;

public class CalcRate {
	public static final double base = 5000.00;// 纳税基准
	static double rateAmount = 0;// 每月税额
	static double beforeAmount = 0;// 税前金额
	static double totlerate = 0;// 累计税额
	static double[] rate;// 税率
	static double p = 0;// 专项扣除
	static double q = 0;// 速算扣除
	static double n = 0;// 五险一金扣除

	static int month = 1;// 月份
	static double[][] rates = { { 0, 0, 0 }, { 36000, 0.03, 0 },
			{ 144000, 0.1, 2520 }, { 3000000, 0.2, 16920 },
			{ 420000, 0.25, 31920 }, { 660000, 0.3, 52920 },
			{ 960000, 0.35, 85920 }, { 999999999, 0.45, 181920 } };

	public static double[] getRate(double totale) {
		double[] rate = { 36000, 0.03, 0 };
		for (int i = 1; i < rates.length; i++) {
			if (totale <= rates[0][0]) {
				rate = rates[0];
			} else if (totale > rates[i - 1][0] && totale <= rates[i][0]) {
				rate = rates[i];
				break;
			}

		}

		return rate;

	}

	public static double inputDouble(String message) {
		double input = -1;
		while (true) {
			System.out.println(message);
			try {
				Scanner in = new Scanner(System.in);
				input = in.nextDouble();
			} catch (Exception e) {
			}
			
			if (input < 0) {
				System.out.println("请输入一个正数值..");
			} else {
				break;
			}
		}
		return input;
	}

	public static int inputMonth() {
		int input = -1;
		while (true) {
			System.out.println("请输入月份:");
			try {
				Scanner in = new Scanner(System.in);
				input = in.nextInt();
			  } catch (Exception e) {
			}
			
			if (input < 1 || input >12) {
				System.out.println("请输入一个正确月份..");
			} else {
				break;
			}
		}
		return input;
	}

	public static void main(String[] args) {
		while (true) {
			rateAmount = 0;
			totlerate = 0;
			System.out.println("-----------个税计算-------------");
			beforeAmount = inputDouble("请输入每月税前金额:");
			n = inputDouble("请输入五险一金扣除金额:");
			q = inputDouble("请输入专项扣除金额:");
			month = inputMonth();
			for(int i = 1;i<= month;i++){
			 double amount = (beforeAmount - n - q -base)*i;
			 rate  = getRate(amount);
			 rateAmount = Math.round(( amount * rate[1])*100)/100 - rate[2]- totlerate;
			 System.out.println("第"+i+"月:应纳税金额:"+amount+",税率:"+rate[1]+",速算扣除金额:"
			 +rate[2]+",往月纳税金额合计:"+totlerate+",本月应缴税额:"+rateAmount);
			 totlerate = totlerate+rateAmount;
			}
		}
	}
}

结果如下:
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/whandgdh/article/details/86304823
今日推荐