北京新的稅法出來了,剛閑來無事花了半個小時用C#寫了個計算工具,代碼貼上,歡迎大家批評指正,互相學些,本人測驗人員,非開發人員,所以代碼寫的爛,勿噴。
一共4個引數 分別是稅前薪水,計稅基準線,五險扣除數,減免額度(六項減免總計)
演算法拆解:
1月份:(30000–5000-4500-2000)×3% = 555元;
2月份:(30000×2-5000×2-4500×2-2000×2)×10% -2520 -555 =625元;
3月份:(30000×3-5000×3-4500×3-2000×3)×10% -2520 -555-625 =1850元
根據前三個月的示例我們可以把計算方式拆分成四個變數求值:
括號內的數值, 預扣率, 速算數,當前累計交稅
(30000×3-5000×3-4500×3-2000×3)×10% -2520 -555-625 =1850元
其中累計交稅的數值最難算,需要用到遞回,其余的都是固定的,比較容易。
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace TaxTool
{
class Program
{
static void Main(string[] args)
{
if(args.Length != 4)
{
Console.WriteLine("Please input correct argument with below:");
Console.WriteLine("TaxTool.exe [Salaray] [BasicLine] [WuXian] [JianMian]");
}else{
double salary = double.Parse(args[0]);
double basicline = double.Parse(args[1]);
double wuxian = double.Parse(args[2]);
double jianmian = double.Parse(args[3]);
double totalTax = 0;
//double salary = 20000;
//double basicline = 5000;
//double wuxian = 4000;
//double jianmian = 2000;
double Jan = GetTax(1, salary, basicline, wuxian, jianmian);
Console.WriteLine("Jan tax is " + Jan);
double Feb = GetTax(2, salary, basicline, wuxian, jianmian);
Console.WriteLine("Feb tax is " + Feb);
double March = GetTax(3, salary, basicline, wuxian, jianmian);
Console.WriteLine("March tax is " + March);
double April = GetTax(4, salary, basicline, wuxian, jianmian);
Console.WriteLine("April tax is " + April);
double May = GetTax(5, salary, basicline, wuxian, jianmian);
Console.WriteLine("May tax is " + May);
double June = GetTax(6, salary, basicline, wuxian, jianmian);
Console.WriteLine("June tax is " + June);
double July = GetTax(7, salary, basicline, wuxian, jianmian);
Console.WriteLine("July tax is " + July);
double August = GetTax(8, salary, basicline, wuxian, jianmian);
Console.WriteLine("August tax is " + August);
double September = GetTax(9, salary, basicline, wuxian, jianmian);
Console.WriteLine("September tax is " + September);
double Octorber = GetTax(10, salary, basicline, wuxian, jianmian);
Console.WriteLine("Octorber tax is " + Octorber);
double November = GetTax(11, salary, basicline, wuxian, jianmian);
Console.WriteLine("November tax is " + November);
double December = GetTax(12, salary, basicline, wuxian, jianmian);
Console.WriteLine("December tax is " + December);
totalTax = Jan + Feb + March + April + May + June + July + August + September + Octorber + November + December;
Console.WriteLine("====================================");
Console.WriteLine("Total tax is : " + totalTax);
}
}
static double GetTax(int month, double salary, double basicline, double wuxian, double jianmian)
{
double tax = 0;
double history = 0;
if (month == 1)
{
double number1 = GetFirstNumber(month, salary, basicline, wuxian, jianmian);
double rate = GetRate(number1);
double fast = GetFastNumber(number1);
tax = number1 * rate - fast;
}
else
{
double number1 = GetFirstNumber(month, salary, basicline, wuxian, jianmian);
double rate = GetRate(number1);
double fast = GetFastNumber(number1);
int i = 1;
while (i < month)
{
//Console.WriteLine("History is " + history);
history =history + GetTax(i, salary, basicline, wuxian, jianmian);
i++;
}
tax = number1 * rate - fast - history;
}
return tax;
}
static double GetRate(double number)
{
if (number < 36000)
return 0.03;
else if (36000 < number && number < 144000)
return 0.1;
else if (144000 < number && number < 300000)
return 0.2;
else if (300000 < number && number < 420000)
return 0.25;
else if (420000 < number && number < 650000)
return 0.3;
else if (650000 < number && number < 960000)
return 0.35;
else if (960000 < number)
return 0.45;
else return 0.03;
}
static double GetFastNumber(double number)
{
if (number < 36000)
return 0;
else if (36000 < number && number < 144000)
return 2520;
else if (144000 < number && number < 300000)
return 16920;
else if (300000 < number && number < 420000)
return 31920;
else if (420000 < number && number < 650000)
return 52920;
else if (650000 < number && number < 960000)
return 85920;
else if (960000 < number)
return 181920;
else return 0;
}
static double GetFirstNumber(int month, double salary, double basicline, double wuxian, double jianmian)
{
double number = 0;
if (month < 0 || month > 12)
{
Console.ForegroundColor = ConsoleColor.Red;
Console.WriteLine("Month must less than 12 and bigger than 0!");
Console.ResetColor();
}
else {
number = salary * month - basicline * month - wuxian * month - jianmian * month;
}
return number;
}
}
}
uj5u.com熱心網友回復:
uj5u.com熱心網友回復:
支持 111111111111111111uj5u.com熱心網友回復:
怎么說 看看吧uj5u.com熱心網友回復:
我關心的到底最終交稅多了還是少了……uj5u.com熱心網友回復:
基本扣費,第一個月3%,第二個月20%,第三個月30%。uj5u.com熱心網友回復:
主要是溫水煮青蛙,讓人一開始的時候產生好像少繳費的錯覺,讓人繳費的痛苦減少。
uj5u.com熱心網友回復:
這種把小高利貸公司放貸演算法拿出來了,而且小公司都得請程式員來做賬了,計算起來好麻煩。uj5u.com熱心網友回復:
太強了,贊一個uj5u.com熱心網友回復:

uj5u.com熱心網友回復:
秀~啊~大佬666uj5u.com熱心網友回復:
好帖子,解決我多年的疑惑uj5u.com熱心網友回復:
與時俱進。。
uj5u.com熱心網友回復:
不錯,很好用uj5u.com熱心網友回復:
贊!!!!!uj5u.com熱心網友回復:
目前至少倆問題:第一,臨界沒取好,兩端的數字是怎么包含的!第二:我事先沒做抵扣,幾個月之后決定抵扣了,然后怎么做清算!uj5u.com熱心網友回復:
uj5u.com熱心網友回復:
路過,不錯,收藏下uj5u.com熱心網友回復:
感覺很不錯嘛。mark一下。。。以后來學習一下。。。哈哈uj5u.com熱心網友回復:
老哥太強了!!!!支持一波啊!!!uj5u.com熱心網友回復:
支持 6666666uj5u.com熱心網友回復:
學習一下
uj5u.com熱心網友回復:
厲害 仔細學習學習uj5u.com熱心網友回復:
uj5u.com熱心網友回復:
贊了,不錯不錯啊
uj5u.com熱心網友回復:
很厲害 值得學習uj5u.com熱心網友回復:
實用,謝謝分享uj5u.com熱心網友回復:
到底是多交了還是少交了uj5u.com熱心網友回復:
博主厲害!!uj5u.com熱心網友回復:


uj5u.com熱心網友回復:
樓主真迅速,這都國家剛出來政策你都弄好程式了,我還沒填寫表格呢,唉uj5u.com熱心網友回復:
支持!!!支持!!!uj5u.com熱心網友回復:
只能說6666666uj5u.com熱心網友回復:
支持,多謝多謝!uj5u.com熱心網友回復:
樓主辛苦了,雖然我啥都看不懂uj5u.com熱心網友回復:
沒有一行注釋?怎么就沒有人質疑演算法的正確性呢?
uj5u.com熱心網友回復:
醉了?。。。。。。。uj5u.com熱心網友回復:
樓主只是玩玩,真算的話還是交給會計師吧uj5u.com熱心網友回復:
應該是交給稅務機關。。。uj5u.com熱心網友回復:
等待大神解答。。。。uj5u.com熱心網友回復:
支持,多謝多謝!uj5u.com熱心網友回復:
牛皮!!!!!!!!!uj5u.com熱心網友回復:
樓主有心了 不過這演算法不難的 難的是與現用的HR系統對接,情況很復雜uj5u.com熱心網友回復:
厲害。。。
uj5u.com熱心網友回復:
1111
uj5u.com熱心網友回復:
學習了,謝謝!!!uj5u.com熱心網友回復:
不錯不錯,路過看看不錯不錯,路過看看,收藏uj5u.com熱心網友回復:
哎,稅稅稅…………uj5u.com熱心網友回復:
學習了,路過看看uj5u.com熱心網友回復:
沒有一行注釋?
怎么就沒有人質疑演算法的正確性呢?
因為演算法比較簡單,主要是能提出這個問題然后讓大家直接一目了然得到稅收。畢竟這個演算法很多人都能實作
uj5u.com熱心網友回復:
路過,不錯,收藏下uj5u.com熱心網友回復:
金蝶K3需要做兩張業務查詢報表說明:1、應收款管理--結算--核銷日志表,以此表為依據,取出單據(銷售發票)對應的產品明細等資訊。
2、存貨核算--報表與分析--銷售毛利潤匯總表,以此表為依據,取出產品對應的本月銷售發票的核銷資訊等。
有意向加扣扣33900048,留言報表開發,發過年回家機票紅包哈。
不能發帖借樓主寶地祝新年大吉
uj5u.com熱心網友回復:
樓主強人,半個小時就碼出來了,佩服uj5u.com熱心網友回復:
不錯 支持一波uj5u.com熱心網友回復:
11111111uj5u.com熱心網友回復:
哎,算來算去還是要上交。uj5u.com熱心網友回復:
學習了,謝謝!!!uj5u.com熱心網友回復:
太強了,贊一個uj5u.com熱心網友回復:
不錯,能弄個EXCEL公式嗎uj5u.com熱心網友回復:
支持一下,說的不錯uj5u.com熱心網友回復:
uj5u.com熱心網友回復:
,小白路過,觀摩學習一下
uj5u.com熱心網友回復:
厲害 仔細學習學習uj5u.com熱心網友回復:
厲害,學習了uj5u.com熱心網友回復:
看看,說不定哪天就用上了uj5u.com熱心網友回復:
學習學習,研究研究uj5u.com熱心網友回復:
這個必須贊一下。趕快編譯留好
uj5u.com熱心網友回復:
支持一下,感覺其實并沒有少uj5u.com熱心網友回復:
向大神們學習!謝謝分享uj5u.com熱心網友回復:

uj5u.com熱心網友回復:
樓主好人 長度補丁uj5u.com熱心網友回復:
贊!!!!!uj5u.com熱心網友回復:
很厲害,受教了 謝謝!uj5u.com熱心網友回復:
我想要下載一個軟體,需要積分,我要怎么樣才能獲取積分?uj5u.com熱心網友回復:
謝謝厲害
學習
uj5u.com熱心網友回復:
各個地方的稅都不一樣吧uj5u.com熱心網友回復:
哎,稅稅稅…………uj5u.com熱心網友回復:
支持,我試試。uj5u.com熱心網友回復:
我關心的到底最終交稅多了還是少了……uj5u.com熱心網友回復:
學習一下
uj5u.com熱心網友回復:
感覺很不錯嘛。mark一下uj5u.com熱心網友回復:
厲害啊,也學不了
uj5u.com熱心網友回復:
這是個好政策uj5u.com熱心網友回復:
感謝大家支持,我可沒有要收大家的分數呀,估計是系統加的吧。放在這里只是和大家一起學習一下,如果有人有新的需求,例如中途突然加減免的情況,可以留言,我有空可以寫個加強版啊。
另外,我可以告訴大家確實少交了,我本人月薪稅前22150,沒車沒房,五險一金全額交,稅也是全額交,因為是外企,所以不偷稅,用工具算下來是這樣的:
C:\>TaxTool.exe
Please input correct argument with below:
TaxTool.exe [Salaray] [BasicLine] [WuXian] [JianMian]
第一個引數是稅前工資,第二個是5000的北京交稅基準線, 第三個是每個月我的五險一金一共交5081.25元,第四個是我只因為獨生子女父母超過60歲減免了2000額度。
C:\>TaxTool.exe 22150 5000 5081.25 2000
Jan tax is 302.0625
Feb tax is 302.0625
March tax is 302.0625
April tax is 601.3125
May tax is 1006.875
June tax is 1006.875
July tax is 1006.875
August tax is 1006.875
September tax is 1006.875
Octorber tax is 1006.875
November tax is 1006.875
December tax is 1006.875
====================================
Total tax is : 9562.5
C:\>
可以看出新政策之后我一年交9562.5的稅,之前我每個月交1003.75X12=12045的稅, 所以可以看出來新政后一年少交了2400多塊錢。
uj5u.com熱心網友回復:
不錯~~~~這個要是可以動態更新就好了~~轉載請註明出處,本文鏈接:https://www.uj5u.com/net/241632.html
標籤:C#
