我目前有一系列间隔,可以用来告诉我该工资的税率是多少。
\nlet tree = new IntervalTree();\n\n// 2020 Federal Income Tax Brackets for Single\nlet singleIntervals = [\n [0, 9875],\n [9876, 40125],\n [40126, 85525],\n [85526, 163300],\n [163301, 207350],\n [207351, 518400],\n [518401, 900000000],\n];\n\ntree.insert(singleIntervals[0], 10);\ntree.insert(singleIntervals[1], 12);\ntree.insert(singleIntervals[2], 22);\ntree.insert(singleIntervals[3], 24);\ntree.insert(singleIntervals[4], 32);\ntree.insert(singleIntervals[5], 35);\ntree.insert(singleIntervals[6], 37);\nRun Code Online (Sandbox Code Playgroud)\n所以我可以用它let values_in_range = tree.search([10000, 10000]);来获取年薪为 10,000 美元的人的税率,即12%。但我发现联邦所得税的运作方式是分批征税。
因此,如果我的工资为 50,000 美元,那么“您\xe2\x80\x99d 为前 9,875 美元支付 10%,为 9,876 美元到 40,125 美元之间的收入部分支付 12%。然后,您\xe2\x80\x99d 支付 22%其余的,因为您的 50,000 美元应税收入中的一部分属于 22% 税级。总账单约为 6,800 美元 \xe2\x80\x94 约占您应税收入的 14%,即使您\xe2\x80\x99 处于22% 的税率。这 14% 称为有效税率。”
\n做这个的最好方式是什么?
\n像下面这样的东西
const income = 50000;
let totalTaxes = 0;
if (income < 9875) {
totalTaxes += income * 0.1;
}
else {
totalTaxes += 9875 * 0.1;
if (income < 40125) {
totalTaxes += (income - 9875) * 0.12;
}
else {
totalTaxes += (40125 - 9875) * 0.12;
//et cetera
}
}
Run Code Online (Sandbox Code Playgroud)
编辑:动态解决方案
我更改了间隔数组以使其更简单:第一个元素是前一个元素的上限,第三个元素是税率。
输出 6790
const singleIntervals = [
[0, 9875, 0.1],
[9875, 40125, 0.12],
[40125, 85525, 0.22],
[85525, 163300, 0.24],
[163300, 207350, 0.32],
[207350, 518400, 0.35],
[518400, 900000000, 0.37],
];
const income = 50000;
let totalTaxes = 0;
for (const interval of singleIntervals) {
if (income < interval[1]) {
totalTaxes += (income - interval[0]) * interval[2];
break;
}
else {
totalTaxes += (interval[1] - interval[0]) * interval[2];
}
}
console.log(totalTaxes);
Run Code Online (Sandbox Code Playgroud)