对于有限的浮点指令计算的函数,用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]; }