现在的位置: 首页 > 综合 > 正文

2011年9月 个人所得税 计算函数

2013年10月20日 ⁄ 综合 ⁄ 共 1508字 ⁄ 字号 评论关闭

 对于有限的浮点指令计算的函数,用float是完全可以的,下面的函数最多循环7次,这样的速度是可以忍受的。如果你真觉得需要更好的速度,那么建议你自己写一长串if ...else if......else,虽然代码看起来不怎么美观,可是运行起来绝对会比我写的要快。

/************************************************************************/
/*  级数         范围         税率     速算扣除数                       */
/*	1           <=1500           3%          0                          */
/*	2        1500<  <=4500      10%        105                          */
/*	3        4500< <=9000       20%        555                          */
/*	4        9000< <=35000      25%       1005                          */
/*	5        35000< <=55000     30%       2755                          */
/*	6        55000< <=80000     35%       5505                          */
/*	7       >80000              45%      13505                          */
/************************************************************************/

int Tax_Num[] = { 1500, 4500-1500, 9000-4500, 35000-9000, 55000-35000, 80000-55000 };//税收范围
float Tax_Rate[] = { 0.03, 0.10, 0.20, 0.25, 0.30, 0.35, 0.45 }; //税率

float Tax(float Income)//Income 是除去各种保险、公积金后的收入
{
	float Total_Tax = 0;
	float Left = Income;
	int i = 0;

	if ( Left < 3500 )//不需要缴税的
		return 0;
	Left -= 3500 ;

	for (i=0; i<(sizeof(Tax_Num)/sizeof(int)) ; i++)
	{
		if ( Left <= Tax_Num[i] )//税收额度
		{
			return Total_Tax+Left*Tax_Rate[i];
		}
		Left -= Tax_Num[i];
		Total_Tax += Tax_Num[i] * Tax_Rate[i];
	}
	return Total_Tax+Left*Tax_Rate[i];
}

/************************************************************************/
/*                 税收反查询函数                                       */
/************************************************************************/
int TAX_VAL[]={45, 300, 900, 6500, 6000, 8750}; //税分层
//float Tax_Rate[] = { 0.03f, 0.10f, 0.20f, 0.25f, 0.30f, 0.35f, 0.45f }; //税率

float ReTax(float OutTax)//OutTax 税
{
	float Total_Income = 3500;
	float Left_Tax = OutTax;
	int i = 0;

	if ( Left_Tax <= 0 )//不需要缴税的
		return -1;  //少于3500,未知

	for (i=0; i<(sizeof(TAX_VAL)/sizeof(int)) ; i++)
	{
		if ( Left_Tax <= TAX_VAL[i] )
		{
			return Total_Income+Left_Tax/Tax_Rate[i];
		}
		Left_Tax -= TAX_VAL[i];
		Total_Income += TAX_VAL[i] / Tax_Rate[i];
	}
	return Total_Income+Left_Tax/Tax_Rate[i];
}

抱歉!评论已关闭.