C语言阶梯税率税款计算程序输出结果异常排查
阶梯个税计算C程序错误排查
对应计税规则
- 收入低于2.5 Lakhs(250000卢比):无需缴纳税款
- 2.5-5 Lakhs(250000-500000卢比)区间:超出2.5Lakhs部分按5%税率计征
- 5-10 Lakhs(500000-1000000卢比)区间:超出5Lakhs部分按20%税率计征
- 10 Lakhs(1000000卢比)以上区间:超出10Lakhs部分按30%税率计征
代码核心错误
代码从高税档往低税档迭代核算的整体思路是可行的,但存在2个致命逻辑错误,导致结果不符合预期:
- 税档判断条件写反,区间匹配失效
第二个分支的判断条件写为salary > 500000 && salary >= 1000000,该条件实际等价于salary >= 1000000,完全无法匹配5-10Lakhs的税档。当收入处于500000-1000000区间时,既不满足第一个if分支(收入≤500000),也不满足这个else if分支(收入≥1000000),会直接进入else分支。 - 税档逻辑错位,计算结果错误
else分支原本设计为100万以上30%税率的计算逻辑,5-10Lakhs区间的收入进入该分支后,会执行(salary - 1000000) * 0.30计算,因收入不足100万,这部分会算出负数税额,最终结果完全失准。本质是把20%税率档和30%税率档的判断边界写反了。
修正后的代码
只需要把第二个分支条件里的>=1000000改为<=1000000即可修复全部逻辑问题,修正后完整代码如下:
#include<stdio.h> int main() { float salary, tax_amount = 0; printf("Enter the Salary:-"); scanf("%f", &salary); while (salary > 250000) { if (salary > 250000 && salary <= 500000) { tax_amount += (salary - 250000) * 0.05; break; } else if (salary > 500000 && salary <= 1000000) // 修正此处判断条件 { tax_amount += (salary - 500000) * 0.20; salary = 500000; } else { tax_amount += (salary - 1000000) * 0.30; salary = 1000000; } } printf("Net Tax Amount:-%.3f", tax_amount); return 0; }
结果验证
用典型值验证修正后代码的计算准确性:
- 输入200000(低于2.5Lakhs起征点):输出税额0,符合规则
- 输入300000(2.5-5Lakhs区间):应缴税额(300000-250000)*0.05=2500,程序输出2500.000,结果正确
- 输入700000(5-10Lakhs区间):应缴税额250000*0.05 + (700000-500000)*0.2 = 52500,程序输出52500.000,结果正确
- 输入1200000(10Lakhs以上区间):应缴税额2500000.05 + 5000000.2 + (1200000-1000000)*0.3 = 172500,程序输出172500.000,结果正确
内容的提问来源于stack exchange,提问作者RACHIT MITTAL
相关产品推荐
相关产品推荐

