税前与税后:工资单上的数字差异
当 HR 告诉你"月薪两万"时,这通常指的是税前工资(gross salary)——在扣除社保、公积金和个人所得税之前的总额。而你银行卡上实际收到的是税后工资(net salary / take-home pay)。这两者之间的差距往往让初入职场的人大吃一惊:月薪 ¥20,000 的人,到手可能只有 ¥15,000 左右。
从税前到税后,工资经历了三层扣除:第一层是社会保险(养老、医疗、失业、工伤、生育)和住房公积金,合称"五险一金",这是法定强制缴纳的,个人承担部分通常占税前工资的 10%-12%(各地比例不同);第二层是个人所得税,基于扣除五险一金和专项附加扣除后的应纳税所得额按累进税率计算;只有扣完这些之后的金额才是到手工资。
理解这个结构很重要,因为它决定了你在谈薪资时的策略。如果对方说"税前 ¥25,000",你需要能快速估算到手金额来判断是否满足生活需求。反过来,如果你期望到手 ¥18,000,需要知道税前应该谈到多少。这个计算并不是简单的乘以一个固定比例——因为中国采用累进税率,收入越高,边际税率越高。
另一个容易混淆的概念是"税前工资"和"用人成本"。企业为你支付的总成本远高于你的税前工资——企业需要额外承担五险一金的企业缴纳部分(约占税前工资的 30%-40%)。所以当你看到税前 ¥20,000 时,企业实际支出约 ¥26,000-28,000。这解释了为什么很多公司倾向于提高基本工资以外的福利来控制社保基数。
中国个人所得税:7 级超额累进税率
中国现行个人所得税法对工资薪金所得采用 7 级超额累进税率,税率从 3% 到 45%。这里的"超额累进"是关键概念:不是所有收入都按同一税率计算,而是把应纳税所得额分成不同区间,每个区间适用各自的税率。很多人误以为"月入 ¥10,000 就要交 10% 的税",这是对累进税制的误解。
2019 年新税法实施后,个税采用"累计预扣法"按年计算。每月的应纳税所得额 = 累计收入 - 累计免征额(¥5,000/月)- 累计五险一金 - 累计专项附加扣除 - 累计其他扣除。7 级税率表为:不超过 ¥36,000 的部分 3%(速算扣除数 0);¥36,000-¥144,000 部分 10%(速算扣除数 ¥2,520);¥144,000-¥300,000 部分 20%(速算扣除数 ¥16,920);¥300,000-¥420,000 部分 25%(速算扣除数 ¥31,920);¥420,000-¥660,000 部分 30%(速算扣除数 ¥52,920);¥660,000-¥960,000 部分 35%(速算扣除数 ¥85,920);超过 ¥960,000 部分 45%(速算扣除数 ¥181,920)。
累计预扣法意味着年初几个月税负较轻,随着累计收入增加,适用税率可能在年中"跳档"。比如月薪 ¥30,000(扣除后年应纳税所得约 ¥240,000),前 3 个月在 3% 档,4-12 月进入 10% 档,年底甚至可能进入 20% 档。这就是为什么很多人发现"年底到手工资变少了"——不是扣错了,而是累计预扣法的正常现象。
速算扣除数是为了简化计算而设计的:应纳税额 = 应纳税所得额 × 适用税率 - 速算扣除数。它的数学本质是补偿"用最高档税率乘以全部金额"与"逐段计算"之间的差值。两种算法结果完全一致,速算扣除数只是一个计算捷径。理解这一点有助于你验证工资计算是否正确。
// 中国个人所得税 7 级累进税率计算
const TAX_BRACKETS = [
{ limit: 36000, rate: 0.03, deduction: 0 },
{ limit: 144000, rate: 0.10, deduction: 2520 },
{ limit: 300000, rate: 0.20, deduction: 16920 },
{ limit: 420000, rate: 0.25, deduction: 31920 },
{ limit: 660000, rate: 0.30, deduction: 52920 },
{ limit: 960000, rate: 0.35, deduction: 85920 },
{ limit: Infinity, rate: 0.45, deduction: 181920 },
];
// 计算年度应纳个人所得税
function calculateAnnualTax(annualTaxableIncome) {
// annualTaxableIncome = 年收入 - 60000(免征额) - 五险一金 - 专项附加扣除
const bracket = TAX_BRACKETS.find(b => annualTaxableIncome <= b.limit);
return annualTaxableIncome * bracket.rate - bracket.deduction;
}
// 示例:月薪 ¥20,000,五险一金个人部分按 10.5%
const monthlySalary = 20000;
const monthlyInsurance = monthlySalary * 0.105; // ¥2,100 五险一金
const annualIncome = monthlySalary * 12; // ¥240,000
const annualExemption = 5000 * 12; // ¥60,000 免征额
const annualInsurance = monthlyInsurance * 12; // ¥25,200
const annualTaxable = annualIncome - annualExemption - annualInsurance;
// ¥240,000 - ¥60,000 - ¥25,200 = ¥154,800
const annualTax = calculateAnnualTax(annualTaxable);
// ¥154,800 × 20% - ¥16,920 = ¥14,040
const monthlyTakeHome = (annualIncome - annualInsurance - annualTax) / 12;
console.log(`月到手约: ¥${monthlyTakeHome.toFixed(0)}`); // 约 ¥15,730五险一金:社保与公积金的计算
五险一金是中国劳动者的法定社会保障,包括养老保险、医疗保险、失业保险、工伤保险、生育保险和住房公积金。每月从工资中扣除的只是个人缴纳部分,企业还需要额外承担一笔更大的金额。各地缴费比例不同,以 2024 年北京为例:养老个人 8%、医疗个人 2%+3 元、失业个人 0.5%、公积金个人 12%(5%-12% 可选),合计个人约 22.5%。
五险一金的缴费基数不等于你的实际工资。每个城市都设定了缴费基数的上下限——通常下限是当地社会平均工资的 60%,上限是 300%。如果你月薪 ¥50,000 但当地上限是 ¥33,891(2024 北京),那你的五险一金按 ¥33,891 计算而非 ¥50,000。这意味着高收入者的五险一金占工资比例实际上低于标准比例。
住房公积金值得特别关注,因为它是唯一完全属于个人的部分——企业缴纳的部分也进入你的公积金账户。比例在 5%-12% 之间由企业选择,企业和个人各缴同等比例。如果企业选择 12%,实际上你每月获得了 24% 的公积金(个人 12% + 企业 12%)。公积金可用于购房贷款(利率低于商贷)、租房提取、装修等用途。
理解五险一金对工资计算至关重要:它直接影响你的应纳税所得额(五险一金在计税前扣除),也影响你的退休金、医保报销额度和公积金贷款额度。很多人只关注到手工资而忽视五险一金,但养老保险和公积金本质上是"延迟发放的工资"。在比较不同城市或不同企业的 offer 时,五险一金的比例和基数是重要参考维度。
专项附加扣除:合法减税的 6 项利器
2019 年新税法引入了 6 项专项附加扣除,允许纳税人在计算应纳税所得额时额外扣除特定支出。这是国家给予的合法减税空间,很多人因为不了解或嫌麻烦而没有申报,等于白白多交了税。六项扣除分别是:子女教育(¥2,000/月/子女)、继续教育(¥400/月或 ¥3,600/年)、大病医疗(超出 ¥15,000 的部分,年上限 ¥80,000)、住房贷款利息(¥1,000/月,最长 240 个月)、住房租金(¥800-¥1,500/月,按城市分档)、赡养老人(¥3,000/月,独生子女)。
举个实际例子:一位在北京工作的程序员,月薪 ¥25,000,有一个孩子在上学,正在还房贷,父母年满 60 且为独生子女。每月专项附加扣除 = ¥2,000(子女教育)+ ¥1,000(房贷利息)+ ¥3,000(赡养老人)= ¥6,000。年扣除额 ¥72,000,这意味着年应纳税所得额减少 ¥72,000。按 10% 税率档计算,每年少交约 ¥7,200 的税——这不是小数目。
专项附加扣除的申报在个人所得税 APP 上操作非常简便,每年 12 月确认下一年的扣除信息即可。需要注意的是:住房贷款利息和住房租金不能同时享受;子女教育可以由父母双方各扣 50% 或一方扣 100%;赡养老人如果不是独生子女则需要分摊(每人最高 ¥1,500/月)。合理规划扣除方式可以进一步优化家庭整体税负。
2023 年还新增了 3 岁以下婴幼儿照护的专项附加扣除(¥2,000/月/婴幼儿),并将子女教育和赡养老人的标准分别提高。政策在不断调整,建议每年关注最新标准。对于收入较高的纳税人,充分利用专项附加扣除可以有效降低适用税率档次,实现显著的节税效果。
边际税率与实际税率:加薪的真实收益
边际税率(marginal tax rate)是指"多赚一块钱需要交多少税"——它等于你当前所在税率档的税率。实际税率(effective tax rate)是指"总共交的税占总收入的百分比"。这两个概念的混淆导致了很多关于"加薪反而亏了"的误解。超额累进税制下,跨入更高税率档只对超出部分征收更高税率,不会导致整体收入减少。
具体例子:假设年应纳税所得额从 ¥140,000 增加到 ¥150,000。¥140,000 在 10% 档内(税额 = ¥140,000 × 10% - ¥2,520 = ¥11,480)。¥150,000 超过了 ¥144,000 的分界线,进入 20% 档(税额 = ¥150,000 × 20% - ¥16,920 = ¥13,080)。多赚的 ¥10,000 多交了 ¥1,600 的税,边际税率约 16%(因为只有超出 ¥144,000 的 ¥6,000 按 20% 计税)。加薪后的到手绝对金额一定增加。
真正需要注意的是"年终奖税率跳档"问题。年终奖如果选择单独计税,有几个"临界点"会导致多发一块钱反而到手更少(因为整个年终奖的适用税率跳了一档)。例如年终奖 ¥36,000 交税 ¥1,080(3%),而 ¥36,001 交税 ¥3,390.1(10%)——多发 ¥1 反而少拿 ¥2,310。这些临界点分别在 ¥36,000、¥144,000、¥300,000、¥420,000、¥660,000、¥960,000 附近。
理解边际税率有助于做出理性的财务决策。比如决定是否要加班获取额外收入时,你的边际收益是税后增量而非税前增量。当边际税率为 20% 时,每多挣 ¥100 只能到手 ¥80;30% 时只到手 ¥70。这不意味着"不值得多挣",而是帮你准确评估时间和精力的投资回报率。
年终奖计税:单独 vs 并入综合所得
年终奖(全年一次性奖金)在中国税法中有两种计税方式可选:单独计税和并入综合所得。2027 年之前,纳税人可以自行选择对自己更有利的方式。单独计税的方法是:年终奖金额 ÷ 12 得到"月均值",按月度税率表确定适用税率和速算扣除数,然后 应纳税额 = 年终奖 × 适用税率 - 速算扣除数。
哪种方式更划算取决于你的综合所得水平。一般规律是:如果综合所得(工资等)已经较高,单独计税更划算,因为并入综合所得会推高整体适用税率;如果综合所得较低(有大量扣除项导致应纳税所得额不高),并入综合所得可能更划算,因为年终奖可以"消化"掉未用完的免征额和低税率空间。
举例对比:月薪 ¥8,000(年薪 ¥96,000),年终奖 ¥48,000。方案一单独计税:工资部分年应纳税所得额 = ¥96,000 - ¥60,000 - ¥约24,000(社保) = ¥12,000,交税 ¥360;年终奖 ¥48,000 ÷ 12 = ¥4,000 适用 10%,交税 ¥48,000 × 10% - ¥210 = ¥4,590;合计 ¥4,950。方案二并入:总应纳税所得额 = ¥12,000 + ¥48,000 = ¥60,000,交税 ¥60,000 × 10% - ¥2,520 = ¥3,480。此例中并入更划算,省了 ¥1,470。
实务建议:在每年 3-6 月个税汇算清缴时,可以两种方式都试算一下,选择税负更低的那个。个人所得税 APP 在汇算时会自动帮你计算两种方式的结果。对于高收入者(年薪超过 ¥30 万),单独计税几乎总是更优。对于中低收入者,需要具体计算。我们的 salary-calculator 工具支持两种方式的对比计算。
常见误解与计算陷阱
误解一:"交的税比我想象的多,是不是算错了?"——大多数人低估了五险一金的扣除力度。以月薪 ¥15,000 为例,五险一金个人部分(按 10.5% 计)就要扣 ¥1,575,加上 ¥5,000 免征额,实际只有 ¥8,425 参与计税。看起来税率表上写着 3%-10%,但加上社保后实际"扣除率"(tax + 社保占税前比例)轻松超过 20%。
误解二:"进入更高税率档就亏了"。如前所述,超额累进制下跨档不会导致净收入减少。唯一的例外是年终奖单独计税的临界点——但这可以通过调整奖金金额来避免(精明的 HR 会把年终奖设置在临界点以下)。如果你的年终奖恰好在临界点附近(¥36,000、¥144,000 等),建议和财务沟通是否可以调整。
误解三:"到手工资 = 税前 × 固定比例"。由于累进税率的存在,不同收入水平的实际扣除比例差异很大。月薪 ¥10,000 的人实际扣除比例约 15%(含社保),月薪 ¥50,000 的人约 28%,月薪 ¥100,000 的人可能超过 35%。不存在一个适用于所有收入水平的固定系数。准确计算必须考虑社保基数、公积金比例、专项附加扣除等多个变量。
误解四:"试用期工资可以不交社保"。这是违法的——劳动关系自用工之日起建立,企业必须从入职当月开始缴纳五险一金。如果试用期间发现社保缴纳有异常,应及时与 HR 沟通并保留证据。同样,"把工资拆成基本工资 + 补贴来降低社保基数"在严格意义上也不合规——社保基数应当按照员工上年度月平均工资确定,包含各类奖金和补贴。
// 完整的月工资到手计算器
function calculateMonthlySalary({
grossMonthly, // 税前月薪
insuranceRate = 0.105, // 五险一金个人比例(北京约 22.5%,取简化值 10.5%)
specialDeduction = 0, // 月专项附加扣除总额
bonusMonths = 0, // 已过月份数(用于累计预扣法)
}) {
const monthlyExemption = 5000; // 月免征额
const monthlyInsurance = grossMonthly * insuranceRate;
// 累计预扣法计算当月应扣税额
const cumulativeIncome = grossMonthly * (bonusMonths + 1);
const cumulativeExemption = monthlyExemption * (bonusMonths + 1);
const cumulativeInsurance = monthlyInsurance * (bonusMonths + 1);
const cumulativeSpecial = specialDeduction * (bonusMonths + 1);
const cumulativeTaxable = Math.max(0,
cumulativeIncome - cumulativeExemption - cumulativeInsurance - cumulativeSpecial
);
// 查找适用税率
const brackets = [
{ limit: 36000, rate: 0.03, deduction: 0 },
{ limit: 144000, rate: 0.10, deduction: 2520 },
{ limit: 300000, rate: 0.20, deduction: 16920 },
{ limit: 420000, rate: 0.25, deduction: 31920 },
{ limit: 660000, rate: 0.30, deduction: 52920 },
{ limit: 960000, rate: 0.35, deduction: 85920 },
{ limit: Infinity, rate: 0.45, deduction: 181920 },
];
const bracket = brackets.find(b => cumulativeTaxable <= b.limit);
const cumulativeTax = cumulativeTaxable * bracket.rate - bracket.deduction;
// 计算之前月份已扣税额
const prevTaxable = Math.max(0,
grossMonthly * bonusMonths - monthlyExemption * bonusMonths
- monthlyInsurance * bonusMonths - specialDeduction * bonusMonths
);
const prevBracket = brackets.find(b => prevTaxable <= b.limit);
const prevTax = prevTaxable * prevBracket.rate - prevBracket.deduction;
const currentMonthTax = Math.max(0, cumulativeTax - prevTax);
const takeHome = grossMonthly - monthlyInsurance - currentMonthTax;
return {
grossMonthly,
insurance: monthlyInsurance.toFixed(2),
tax: currentMonthTax.toFixed(2),
takeHome: takeHome.toFixed(2),
effectiveRate: ((1 - takeHome / grossMonthly) * 100).toFixed(1) + '%',
};
}
// 示例:月薪 ¥25,000,专项附加扣除 ¥4,000,计算第 6 个月
console.log(calculateMonthlySalary({
grossMonthly: 25000,
specialDeduction: 4000,
bonusMonths: 5, // 已过5个月,算第6个月
}));