工資計算器的小demo

不知道大家每個月發工資了會不會自己親手再計算一遍,特別是工資不固定的朋友.所以我寫了一個安卓的小demo,可以幫助大家計算工資,方便又快捷.

目前我是根據我公司的發放標準來計算的,大部分應該是這樣的,如果哪有區別可以提建議,我儘量把它做的大衆化.我們公司免繳稅額是3500,缺勤和加班每天的工資是基本工資/21.75,納稅的方式是按照北京納稅標準來的.現在最高納稅工資是35000元,再高了就計算不了了.

計算的方式是按照含稅級距的範圍*稅率計算的.有個速算扣除數,我到現在還沒有弄明白是啥意思,在網上可以查了一些關於這方面的東西,但我計算時好像跟他沒有關係,別人用了也沒有錯誤.本軟件現在還有什麼高的技能點,就有一個四捨五入保留兩位小數.不過我會一直維護的,因爲我也在用,如果大家想用可以到我的github上下載對應的demo.

我把我的代碼貼出來吧!歡迎賜教.

public class MainActivity extends AppCompatActivity {

	EditText et_basic;//基本工資
	EditText et_insure;//五險一金
	EditText et_absence;//缺勤
	EditText et_overtime;//加班
	TextView tv_allRate;//總的個人所得稅
	TextView tv_finalSalary;//最後所得工資

	@Override
	protected void onCreate(Bundle savedInstanceState) {
		super.onCreate(savedInstanceState);
		setContentView(R.layout.activity_main);
		et_basic = (EditText) findViewById(R.id.et_basic);
		et_insure = (EditText) findViewById(R.id.et_insure);
		et_absence = (EditText) findViewById(R.id.et_absence);
		et_overtime = (EditText) findViewById(R.id.et_overtime);
		tv_allRate = (TextView) findViewById(R.id.tv_allRate);
		tv_finalSalary = (TextView) findViewById(R.id.tv_finalSalary);
	}

	public void calculator(View view) {
		String basic = et_basic.getText().toString().trim();
		String insure = et_insure.getText().toString().trim();
		String absence = et_absence.getText().toString().trim();
		String overtime = et_overtime.getText().toString().trim();
		float basicSalary = Float.parseFloat(basic);
		float insureGold = Float.parseFloat(insure);
		int absenceDay = Integer.parseInt(absence);//獲取缺勤天數
		int overtimeDay = Integer.parseInt(overtime);//獲取加班天數
		//計算應得工資
		//如果加班或缺勤,每天的工資爲
		double perDay = basicSalary / 21.75;
		//計算總工資 = 基本工資 + 加班的工資 - 缺勤的工資
		double allSalary = basicSalary + overtimeDay * perDay - absenceDay * perDay;
		double youHave = allSalary - insureGold;
		if (youHave < 0) {
			ToastUtils.show("喫飯的錢都沒有了,還上五險作甚!");
			return;
		}
		//需要納稅的工資 = 總工資 - 五險一金 - 免徵額(3500)
		double payRate = youHave - 3500;
		//由於是個人納稅,所以使用含稅級距的標準
		double allRate = 0;
		if (payRate > 0) {
			allRate = caculateRate(payRate);
		}
		//最後贏得工資爲
		double finalSalary = youHave - allRate;
		//給控件賦值
		tv_allRate.setText(roundDouble(allRate) + "");
		tv_finalSalary.setText(roundDouble(finalSalary) + "");
	}

	/**
	 * 傳入工資納稅的部分,獲取總共需要交納的個人所得稅
	 * @param payRate 傳入工資納稅的部分
	 * @return 總共需要交納的個人所得稅
	 */
	private double caculateRate(double payRate) {
		double allRate = 0;
		/**
		 * 標準:      含稅級距    稅率(%)
		 *          不超過1500       3
		 *          1500-4500       10
		 *          4500-9000       20
		 *          9000-35000      25
		 */
		if (payRate < 1500) {
			allRate = payRate * 0.03;
		} else if (payRate < 4500) {
			allRate = 45 + (payRate - 1500) * 0.1;
		} else if (payRate < 9000) {
			allRate = 45 + 300 + (payRate - 4500) * 0.2;
		} else if (payRate < 35000) {
			allRate = 45 + 300 + 900 + (payRate - 9000) * 0.1;
		}
		return allRate;
	}

	/**
	 * 小數 四捨五入 保留2位
	 *
	 * @param val 原始小數
	 * @return 四捨五入後保留的小數
	 */

	public static Double roundDouble(double val) {
		Double ret = null;
		try {
			double factor = Math.pow(10, 2);
			ret = Math.floor(val * factor + 0.5) / factor;
		} catch (Exception e) {
			e.printStackTrace();
		}
		return ret;
	}
}


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章