├── CNAME
├── docs
├── CNAME
├── .DS_Store
├── index.css
├── index.js
└── index.html
├── Makefile
├── .gitignore
├── package.json
└── readme.md
/CNAME:
--------------------------------------------------------------------------------
1 | amt-calculator.com
2 | www.amt-calculator.com
--------------------------------------------------------------------------------
/docs/CNAME:
--------------------------------------------------------------------------------
1 | amt-calculator.com
2 | www.amt-calculator.com
--------------------------------------------------------------------------------
/docs/.DS_Store:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/lambtron/amt-calculator/HEAD/docs/.DS_Store
--------------------------------------------------------------------------------
/Makefile:
--------------------------------------------------------------------------------
1 |
2 | #
3 | # Default.
4 | #
5 |
6 | default: server
7 |
8 | #
9 | # Tasks.
10 | #
11 |
12 | # Install node_modules on your machine.
13 | install: node_modules
14 |
15 | # Install node modules with npm.
16 | node_modules: package.json
17 | @npm install
18 | @touch node_modules
19 |
20 | # Clean.
21 | clean:
22 | rm -rf node_modules
23 |
24 | # Server.
25 | server:
26 | python -m SimpleHTTPServer \
27 | `open "http://localhost:8000/docs"`
28 |
29 | #
30 | # Phonies.
31 | #
32 |
33 | .PHONY: install
34 | .PHONY: clean
35 | .PHONY: server
--------------------------------------------------------------------------------
/.gitignore:
--------------------------------------------------------------------------------
1 | # Logs
2 | logs
3 | *.log
4 |
5 | # Runtime data
6 | pids
7 | *.pid
8 | *.seed
9 |
10 | # Directory for instrumented libs generated by jscoverage/JSCover
11 | lib-cov
12 |
13 | # Coverage directory used by tools like istanbul
14 | coverage
15 |
16 | # Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
17 | .grunt
18 |
19 | # node-waf configuration
20 | .lock-wscript
21 |
22 | # Compiled binary addons (http://nodejs.org/api/addons.html)
23 | build/Release
24 |
25 | # Dependency directory
26 | # https://www.npmjs.org/doc/misc/npm-faq.html#should-i-check-my-node_modules-folder-into-git
27 | node_modules
--------------------------------------------------------------------------------
/docs/index.css:
--------------------------------------------------------------------------------
1 |
2 | input.underlined {
3 | border: 0px;
4 | border-bottom: 1px solid black;
5 | }
6 |
7 | input:focus {
8 | outline: none;
9 | }
10 |
11 | .dollar:before {
12 | font-size: 1.5rem;
13 | vertical-align: top;
14 | content: '$';
15 | }
16 |
17 | a.active {
18 | opacity: .5;
19 | }
20 |
21 |
22 | ::-webkit-input-placeholder { /* WebKit browsers */
23 | color: #A8A8A8;
24 | }
25 | :-moz-placeholder { /* Mozilla Firefox 4 to 18 */
26 | color: #A8A8A8;
27 | }
28 | ::-moz-placeholder { /* Mozilla Firefox 19+ */
29 | color: #A8A8A8;
30 | }
31 | :-ms-input-placeholder { /* Internet Explorer 10+ */
32 | color: #A8A8A8;
33 | }
--------------------------------------------------------------------------------
/package.json:
--------------------------------------------------------------------------------
1 | {
2 | "name": "amt-calculator",
3 | "description": "Quick and dirty Alternative Minimum Tax calculation focused on exercising incentive stock options.",
4 | "version": "0.0.1",
5 | "author": "Andy Jiang",
6 | "main": "Makefile",
7 | "scripts": {
8 | "start": "make server"
9 | },
10 | "repository": {
11 | "type": "git",
12 | "url": "https://github.com/lambtron/amt-calculator.git"
13 | },
14 | "engines": {
15 | "node": "^8.3.0",
16 | "npm": "^5.3.0"
17 | },
18 | "private": true,
19 | "bugs": {
20 | "url": "https://github.com/lambtron/amt-calculator/issues"
21 | },
22 | "homepage": "https://github.com/lambtron/amt-calculator#readme",
23 | "license": "MIT"
24 | }
25 |
--------------------------------------------------------------------------------
/readme.md:
--------------------------------------------------------------------------------
1 |
2 | # How much is your Alternative Minimum Tax?
3 |
4 | If you exercise Incentive Stock Options ("ISOs"), you may be subject to Alternative Minimum Tax ("AMT"). AMT is a parallel tax system imposed on an alternative, more comprehensive measure of income, which includes the unrealized gains of ISO value, with fewer opportunities for deductions. If the calculated AMT exceeds the ordinary income tax, then the AMT amount is used.
5 |
6 | *Note that this is an oversimplified estimate that focuses exclusively on ISOs and their impact on AMT. This is not legal or tax advice. For assistance with your specific situation, please consult a tax lawyer.*
7 |
8 | ## Calculating AMT
9 |
10 | We first start with the adjusted gross income. For the purposes of this back-of-the-envelope estimation, we use the annual gross salary. However, there are many other adjustments that influence this number. Learn more about [determining the adjusted gross income](http://www.investopedia.com/financial-edge/0312/how-to-calculate-agi-for-tax-purposes.aspx).
11 |
12 | To get to the alternative minimum taxable income ("AMTI"), there are many income adjustments applied to the adjusted gross income. This site only considers the value of ISOs when exercised (the fair market value less the strike price). However, [there are many other types of deductions subject to AMT](https://turbotax.intuit.com/tax-tools/tax-tips/IRS-Tax-Return/Alternative-Minimum-Tax--Common-Questions/INF12072.html).
13 |
14 | To calculate the AMT base, we take AMTI and less the AMT exemptions. The actual exemption amount depends on the filing status and total AMTI. Here is the table for determining the exemption amounts for 2016.
15 |
16 | ```
17 | | Filing Status | Amount | Phase Out |
18 | | ------------------------- | ------- | --------- |
19 | | Single | 70,300 | 500,000 |
20 | | Married | 109,400 | 1,000,000 |
21 | | Married Filing Separately | 54,700 | 500,00 |
22 | ```
23 |
24 | To prevent upper-income taxpayers from benefiting from the exemption, it "phases out" as AMTI increases. For every $1 beyond the phase out amount, the exemption amount is reduced by $0.25. For example, a single person who has AMTI of $525,000 will only have 70,300 – ((525,000 – 500,000) x 0.25) = 64,050 of exemptions. [Learn more about calculating AMT exemptions](http://amtadvisor.com/AMT_Exemption.html).
25 |
26 | We calculate the tentative minimum tax by applying the AMT rate (either 26% or 28%, depending on the amount) to the AMT base. For 2018, the threshold where the 26 percent AMT tax bracket ends and the 28 percent AMT tax bracket begins is $191,500 for married filing jointly and $95,750 for all other individuals.
27 |
28 | Finally, we compare the tentative minimum tax to the ordinary income tax. Ordinary income tax is calculated based on a varying rates associated with the income, as well as the filing status (the table for 2018 is below). The ultimate payable tax will be the greater of either the tentative minimum tax or the ordinary income tax.
29 |
30 | Here is the table for ordinary income tax brackets.
31 |
32 | ```
33 | | Rate | Single | Married | Married, Filing Separately |
34 | | ----- | ------- | ------- | -------------------------- |
35 | | 10% | 0 | 0 | 0 |
36 | | 12% | 9,525 | 19,050 | 9,525 |
37 | | 22% | 38,700 | 77,400 | 38,700 |
38 | | 24% | 82,500 | 165,000 | 82,500 |
39 | | 32% | 157,500 | 315,000 | 157,500 |
40 | | 35% | 200,000 | 400,000 | 200,000 |
41 | | 37% | 500,000 | 600,000 | 300,000 |
42 | ```
43 |
44 | The rate on the left applies to income from that row to the one beneath it. For instance, a single person with $150,000 in income will pay 10% on the first $9,525, 12% on the next $29,175, 22% on the next $43,800, and 24% on the remaining $67,500.
45 |
46 | ## Additional Reading
47 |
48 | - [What Exactly Is The Alternative Minimum Tax (AMT)? (Forbes)](https://www.forbes.com/sites/kellyphillipserb/2017/03/15/what-exactly-is-the-alternative-minimum-tax-amt/#796f48993dc9)
49 | - [Alternative Minimum Tax (AMT) for Individuals (This Matter)](http://thismatter.com/money/tax/alternative-minimum-tax.htm)
50 | - [How Does the Alternative Minimum Tax Work? (Nerdwallet)](https://www.nerdwallet.com/blog/taxes/alternative-minimum-tax-amt/)
51 | - [Alternative Minimum Tax: Common Questions (Turbotax)](https://turbotax.intuit.com/tax-tools/tax-tips/IRS-Tax-Return/Alternative-Minimum-Tax--Common-Questions/INF12072.html)
52 | - [Stock Options and the Alternative Minimum Tax (AMT) (NCEO)](https://www.nceo.org/articles/stock-options-alternative-minimum-tax-amt)
53 | - [What’s your AGI? (CNN Money)](http://money.cnn.com/tmp/networth2.html)
54 | - [How To Calculate AGI For Tax Purposes (Investopedia)](http://www.investopedia.com/financial-edge/0312/how-to-calculate-agi-for-tax-purposes.aspx)
55 | - [The AMT Exemption (AMT Advisor)](http://amtadvisor.com/AMT_Exemption.html)
56 | - [2018 Tax Brackets (Tax Foundation)](https://taxfoundation.org/2018-tax-brackets/)
57 |
58 | ## License
59 |
60 | MIT.
61 |
62 |
--------------------------------------------------------------------------------
/docs/index.js:
--------------------------------------------------------------------------------
1 |
2 | 'use strict';
3 |
4 | (function() {
5 |
6 | // Inputs.
7 | var income = 0;
8 | // var isos = 0;
9 | var strike = 0;
10 | var fmv = 0;
11 | var filingStatus = 'single';
12 | var maxISOs = 0;
13 |
14 | // Outputs
15 | var bargainElement = 0;
16 | var amti = 0;
17 | var amtexemption = 0;
18 | var amtbase = 0;
19 | var amt = 0;
20 | var ordinaryTax = 0;
21 | var payableTax = 0;
22 |
23 | // Constants for 2016.
24 | var exemption = {
25 | 'single': {
26 | amount: 70300,
27 | phaseout: 500000,
28 | break: 95750
29 | },
30 | 'married': {
31 | amount: 109400,
32 | phaseout: 1000000,
33 | break: 191500
34 | },
35 | 'mfs': {
36 | amount: 54700,
37 | phaseout: 500000,
38 | break: 95750
39 | }
40 | };
41 | var ordinaryTaxRates = {
42 | 'single': {
43 | '10': 0,
44 | '12': 9525,
45 | '22': 38700,
46 | '24': 82500,
47 | '32': 157500,
48 | '35': 200000,
49 | '37': 500000
50 | },
51 | 'married': {
52 | '10': 0,
53 | '12': 19050,
54 | '22': 77400,
55 | '24': 165000,
56 | '32': 315000,
57 | '35': 400000,
58 | '37': 600000
59 | },
60 | 'mfs': {
61 | '10': 0,
62 | '12': 9525,
63 | '22': 38700,
64 | '24': 82500,
65 | '32': 157500,
66 | '35': 200000,
67 | '37': 300000
68 | }
69 | }
70 |
71 |
72 | // Calculate bargain element.
73 | // (fmv - strike price) * ISOs exercised
74 | // We pass `isos` into the function to allow for newton's method
75 | function calculateBargainElement(isos) {
76 | return (num(fmv) - num(strike)) * num(isos);
77 | }
78 |
79 | // Calculate amt exemption.
80 | function calculateAmtExemption(amti) {
81 | var ex = exemption[filingStatus];
82 | var amount = ex.amount;
83 | var deduct = 0;
84 | if (num(amti) > ex.phaseout) deduct += (num(amti) - ex.phaseout) * 0.25;
85 | amount -= deduct;
86 | if (amount > 0) return amount;
87 | return 0;
88 | }
89 |
90 | // Calculate amt.
91 | function calculateAmt(amtbase) {
92 | var ex = exemption[filingStatus];
93 | if (num(amtbase) > ex.break) return ex.break * 0.26 + (num(amtbase) - ex.break) * 0.28;
94 | if (isNaN(amtbase)) amtbase = 0;
95 | return num(amtbase) * 0.26;
96 | }
97 |
98 | // Calculate ordinary tax.
99 | function calculateOrdinaryTax() {
100 | var inc = num(income)
101 | var ord = ordinaryTaxRates[filingStatus];
102 | var keys = Object.keys(ord);
103 | var bracket = 0;
104 | var tax = 0;
105 |
106 | // Figure out which bracket we're in.
107 | var i = 0;
108 | while (inc > ord[keys[i]]) {
109 | i++;
110 | }
111 | i--;
112 |
113 | // Calculate it.
114 | tax += (inc - ord[keys[i]]) * num(keys[i]) / 100
115 | i--;
116 | while (i >= 0) {
117 | tax += (ord[keys[i + 1]] - ord[keys[i]]) * num(keys[i]) / 100
118 | i--;
119 | }
120 |
121 | return tax;
122 | }
123 |
124 | // Set the filing status.
125 | document.querySelectorAll('a.filing-status').forEach(function(el) {
126 | el.addEventListener('click', function(e) {
127 | var arr = document.querySelectorAll('a.filing-status');
128 | var status = e.target.id;
129 | for (var i = 0; i < arr.length; i++) {
130 | if (arr[i].id !== status) removeClass(arr[i], 'active')
131 | else {
132 | addClass(arr[i], 'active');
133 | filingStatus = status;
134 | }
135 | }
136 | calculate();
137 | updateHtml();
138 | })
139 | })
140 |
141 | // Calculate everything.
142 | function calculate(isos) {
143 | bargainElement = calculateBargainElement(isos);
144 | amti = num(income) + num(bargainElement);
145 | amtexemption = calculateAmtExemption(num(amti));
146 | amtbase = num(amti) - num(amtexemption);
147 | amt = calculateAmt(num(amtbase));
148 | ordinaryTax = calculateOrdinaryTax();
149 | payableTax = Math.max(num(amt), num(ordinaryTax))
150 | }
151 |
152 | // Collect inputs.
153 | function getInputs() {
154 | income = document.getElementById('income').value
155 | strike = document.getElementById('strike').value
156 | // isos = document.getElementById('isos').value
157 | fmv = document.getElementById('fmv').value
158 | }
159 |
160 | // Format inputs.
161 | function formatInputs() {
162 | document.getElementById('income').value = document.getElementById('income').value.replace(/\D/g, "").replace(/\B(?=(\d{3})+(?!\d))/g, ",");
163 | document.getElementById('isos').value = document.getElementById('isos').value.replace(/\D/g, "").replace(/\B(?=(\d{3})+(?!\d))/g, ",");
164 | document.getElementById('strike').value = document.getElementById('strike').value.replace(/\D\./g, "");
165 | document.getElementById('fmv').value = document.getElementById('fmv').value.replace(/\D\./g, "");
166 | }
167 |
168 | // Send outputs to HTML elements.
169 | function updateHtml() {
170 | document.getElementById('bargainElement').innerText = numberFormat(bargainElement, ',');
171 | document.getElementById('amti').innerText = numberFormat(amti, ',');
172 | document.getElementById('amtexemption').innerText = numberFormat(amtexemption, ',');
173 | document.getElementById('amtbase').innerText = numberFormat(amtbase, ',');
174 | document.getElementById('amt').innerText = numberFormat(amt, ',');
175 | document.getElementById('ordinaryTax').innerText = numberFormat(ordinaryTax, ',');
176 | document.getElementById('income-output').innerText = document.getElementById('income').value;
177 | document.getElementById('payable-tax').innerText = numberFormat(payableTax, ',');
178 | if (amt > ordinaryTax) {
179 | removeClass(document.getElementById('max-isos-wrapper'), 'dn');
180 | document.getElementById('max-isos').innerText = numberFormat(maxISOs, ',');
181 | } else {
182 | addClass(document.getElementById('max-isos-wrapper'), 'dn');
183 | }
184 | }
185 |
186 | // Whenever user key ups on the form.
187 | document.querySelector('form').addEventListener('keyup', function(e) {
188 | getInputs();
189 | formatInputs();
190 | var isos = document.getElementById('isos').value;
191 | calculate(isos);
192 | maxISOs = findISOs(isos);
193 | updateHtml();
194 | })
195 |
196 | // Format numbers.
197 | function numberFormat(number, _sep) {
198 | var _number = number;
199 | _number = typeof _number != "undefined" && _number > 0 ? _number : "";
200 | _number = '' + Math.round(_number);
201 | _number = _number.replace(new RegExp("^(\\d{" + (_number.length%3? _number.length%3:0) + "})(\\d{3})", "g"), "$1 $2").replace(/(\d{3})+?/gi, "$1 ").trim();
202 | if (typeof _sep != "undefined" && _sep != " ") _number = _number.replace(/\s/g, _sep);
203 | return _number;
204 | }
205 |
206 | // Turn string to number.
207 | function num(string) {
208 | if (typeof string === 'undefined') return 0;
209 | if (typeof string === 'number') return string;
210 | string = string.replace(/\,/g,'');
211 | return parseFloat(string, 10);
212 | }
213 |
214 | /**
215 | * Netown's method to approximate ISO shares where Ordinary Tax equals AMT
216 | */
217 |
218 | function findISOs(isos) {
219 | var tempMaxISOs = num(isos);
220 | var discrepancy = amt - ordinaryTax;
221 |
222 | var counter = 0;
223 |
224 | var upper = num(isos);
225 | var lower = 0;
226 |
227 | // Iterate until discrepancy is less than 100.
228 | while (Math.abs(discrepancy) > 10) {
229 | // Not the most intelligent routing of seeding ISOs.
230 | if (discrepancy > 0) {
231 | upper = tempMaxISOs;
232 | tempMaxISOs = (upper + lower) / 2;
233 | }
234 | if (discrepancy < 0) {
235 | lower = tempMaxISOs;
236 | tempMaxISOs = (upper + lower) / 2;
237 | }
238 |
239 | var bargainElement = calculateBargainElement(tempMaxISOs);
240 | var amti = num(income) + num(bargainElement);
241 | var amtexemption = calculateAmtExemption(num(amti));
242 | var amtbase = num(amti) - num(amtexemption);
243 | var newAmt = calculateAmt(num(amtbase));
244 |
245 | discrepancy = newAmt - ordinaryTax;
246 |
247 | // console.log('counter %d, discrepancy %d, isos %d', counter, discrepancy, tempMaxISOs)
248 |
249 | counter++;
250 | if (counter > 100) break;
251 | }
252 |
253 | return tempMaxISOs;
254 | }
255 |
256 | /**
257 | * Add class once.
258 | */
259 |
260 | function addClass(el, c) {
261 | if (el.classList.contains(c)) return;
262 | return el.classList.add(c);
263 | }
264 |
265 | /**
266 | * Remove class once.
267 | */
268 |
269 | function removeClass(el, c) {
270 | if (el.classList.contains(c)) return el.classList.remove(c);
271 | }
272 |
273 | })()
274 |
--------------------------------------------------------------------------------
/docs/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | AMT Calculator
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
18 |
19 |
20 |
21 |
22 |
31 |
32 |
33 |
34 |
35 |
36 |
37 | How much is your Alternative Minimum Tax?
38 |
39 | If you exercise Incentive Stock Options (“ISOs”), you may be subject to Alternative Minimum Tax (“AMT”). AMT is a parallel tax system imposed on an alternative, more comprehensive measure of income, which includes the unrealized gains of ISO value and fewer opportunities for deductions. If the calculated AMT exceeds the ordinary income tax, then the AMT amount is used.
40 |
41 |
42 | Note that this is an oversimplified estimate that focuses exclusively on ISOs and their impact on AMT. This is not legal or tax advice. For assistance with your specific situation, please consult a tax lawyer.
43 |
44 |
45 |
46 |
47 |
82 |
83 |
84 |
85 |
86 | Given your input, here’s an AMT estimate for 2018.
87 |
88 |
89 | Income
90 |
91 |
92 |
93 | + Adjustment
94 |
95 |
96 |
97 | AMT Income
98 |
99 |
100 |
101 | — AMT Exemption
102 |
103 |
104 |
105 | AMT Base
106 |
107 |
108 |
109 |
Tentative Minimum Tax
110 |
111 |
(26% or 28% of AMT base)
112 |
113 |
114 | Ordinary Income Tax
115 |
116 |
117 |
118 |
Payable Tax
119 |
120 |
(Greater of tentative minimum tax or ordinary income tax)
121 |
122 |
123 |
Max ISOs to avoid AMT
124 |
125 |
(Exercising this many ISOs will not trigger AMT)
126 |
127 |
128 |
129 |
130 |
How to calculate AMT
131 |
132 | We first start with the adjusted gross income. For the purposes of this back-of-the-envelope estimation, we use the annual gross salary. However, there are many other adjustments that influence this number. Learn more about determining the adjusted gross income.
133 |
134 |
135 | To get to the alternative minimum taxable income (“AMTI”), there are many income adjustments applied to the adjusted gross income. This site only considers the value of ISOs when exercised (the most recent 409A appraisal of the stock less the strike price). However, there are many other types of deductions subject to AMT.
136 |
137 |
138 | To calculate the AMT base, we take AMTI and less the AMT exemptions. The actual exemption amount depends on the filing status and total AMTI. Here is the table for determining the exemption amounts for 2018:
139 |
140 |
141 |
142 | Filing Status
143 |
144 |
145 | Amount
146 |
147 |
148 | Phase out
149 |
150 |
151 |
152 |
153 | Single
154 |
155 |
156 | 70,300
157 |
158 |
159 | 500,000
160 |
161 |
162 |
163 |
164 | Married
165 |
166 |
167 | 109,400
168 |
169 |
170 | 1,000,000
171 |
172 |
173 |
174 |
175 | Married, Filing Separately
176 |
177 |
178 | 54,700
179 |
180 |
181 | 500,000
182 |
183 |
184 |
185 | To prevent upper-income taxpayers from benefiting from the exemption, it “phases out” as AMTI increases. For every $1 beyond the phase out amount, the exemption amount is reduced by $0.25. For example, a single person who has AMTI of $525,000 will only have 70,300 – ((525,000 – 500,000) x 0.25) = 64,050 of exemptions. Learn more about calculating AMT exemptions.
186 |
187 |
188 | We calculate the tentative minimum tax by applying the AMT rate (either 26% or 28%, depending on the amount) to the AMT base. For 2018, the threshold where the 26 percent AMT tax bracket ends and the 28 percent AMT tax bracket begins is $95,750 for married filing separately and $191,500 for all other filing statuses.
189 |
190 |
191 |
192 | Filing Status
193 |
194 |
195 | 26%, 28% Threshold
196 |
197 |
198 |
199 |
200 | Single
201 |
202 |
203 | 95,750
204 |
205 |
206 |
207 |
208 | Married
209 |
210 |
211 | 191,500
212 |
213 |
214 |
215 |
216 | Married, Filing Separately
217 |
218 |
219 | 95,750
220 |
221 |
222 |
223 | Finally, we compare the tentative minimum tax to the ordinary income tax. Ordinary income tax is calculated based on a varying rates associated with the income, as well as the filing status (the table for 2018 is below). The ultimate payable tax will be the greater of either the tentative minimum tax or the ordinary income tax.
224 |
225 |
226 | Here is the table for ordinary income tax brackets:
227 |
228 |
229 |
230 | Rate
231 |
232 |
233 | Single
234 |
235 |
236 | Married
237 |
238 |
239 | Married, Filing Separately
240 |
241 |
242 |
243 |
244 | 10%
245 |
246 |
247 | 0
248 |
249 |
250 | 0
251 |
252 |
253 | 0
254 |
255 |
256 |
257 |
258 | 12%
259 |
260 |
261 | 9,525
262 |
263 |
264 | 19,050
265 |
266 |
267 | 9,525
268 |
269 |
270 |
271 |
272 | 22%
273 |
274 |
275 | 38,700
276 |
277 |
278 | 77,400
279 |
280 |
281 | 38,700
282 |
283 |
284 |
285 |
286 | 24%
287 |
288 |
289 | 82,500
290 |
291 |
292 | 165,000
293 |
294 |
295 | 82,500
296 |
297 |
298 |
299 |
300 | 32%
301 |
302 |
303 | 157,500
304 |
305 |
306 | 315,000
307 |
308 |
309 | 157,500
310 |
311 |
312 |
313 |
314 | 35%
315 |
316 |
317 | 200,000
318 |
319 |
320 | 400,000
321 |
322 |
323 | 200,000
324 |
325 |
326 |
327 |
328 | 37%
329 |
330 |
331 | 500,000
332 |
333 |
334 | 600,000
335 |
336 |
337 | 500,000
338 |
339 |
340 |
341 | The rate on the left applies to income from that row to the one beneath it. For instance, a single person with $150,000 in income will pay 10% on the first $9,525, 12% on the next $29,175, 22% on the next $43,800, and 24% on the remaining $67,500.
342 |
343 |
344 |
Additional Reading
345 |
346 |
359 |
360 |
361 |
362 |
363 |
364 |
365 |
366 |
369 |
370 |
371 |
372 |
--------------------------------------------------------------------------------