Error message
Deprecated function: Creation of dynamic property Drupal\tablefield\TableValue::$value is deprecated in Drupal\Core\TypedData\TypedData->setValue() (line 102 of core/lib/Drupal/Core/TypedData/TypedData.php).
Drupal\Core\TypedData\TypedData->setValue(NULL, ) (Line: 87) Drupal\Core\TypedData\Plugin\DataType\Map->setValue(Array, ) (Line: 125) Drupal\Core\Field\FieldItemBase->setValue(Array, ) (Line: 206) Drupal\tablefield\Plugin\Field\FieldType\TablefieldItem->setValue(Array, ) (Line: 208) Drupal\Core\TypedData\TypedDataManager->getPropertyInstance(Object, 0, Array) (Line: 91) Drupal\Core\Field\FieldTypePluginManager->createFieldItem(Object, 0, Array) (Line: 41) Drupal\Core\Field\FieldItemList->createItem(0, Array) (Line: 69) Drupal\Core\TypedData\Plugin\DataType\ItemList->setValue(Array, ) (Line: 107) Drupal\Core\Field\FieldItemList->setValue(Array, ) (Line: 208) Drupal\Core\TypedData\TypedDataManager->getPropertyInstance(Object, 'field_calc_table', Array) (Line: 83) Drupal\Core\Field\FieldTypePluginManager->createFieldItemList(Object, 'field_calc_table', Array) (Line: 633) Drupal\Core\Entity\ContentEntityBase->getTranslatedField('field_calc_table', 'x-default') (Line: 597) Drupal\Core\Entity\ContentEntityBase->get('field_calc_table') (Line: 325) Drupal\Core\Entity\EntityViewBuilder->buildComponents(Array, Array, Array, 'default') (Line: 281) Drupal\Core\Entity\EntityViewBuilder->buildMultiple(Array) (Line: 18) Drupal\paragraphs\ParagraphViewBuilder->buildMultiple(Array) (Line: 238) Drupal\Core\Entity\EntityViewBuilder->build(Array) call_user_func_array(Array, Array) (Line: 111) Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 859) Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 421) Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 240) Drupal\Core\Render\Renderer->render(Array) (Line: 475) Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 68) __TwigTemplate_291debf4453c7ba2e34da4fa4cd83699->doDisplay(Array, Array) (Line: 394) Twig\Template->displayWithErrorHandling(Array, Array) (Line: 367) Twig\Template->display(Array) (Line: 379) Twig\Template->render(Array) (Line: 38) Twig\TemplateWrapper->render(Array) (Line: 39) twig_render_template('themes/techprosolutions/templates/field/field.html.twig', Array) (Line: 348) Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 480) Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 240) Drupal\Core\Render\Renderer->render(Array) (Line: 475) Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 111) __TwigTemplate_ff95cc8dbd011c21d5f5e7f83f8118b4->doDisplay(Array, Array) (Line: 394) Twig\Template->displayWithErrorHandling(Array, Array) (Line: 367) Twig\Template->display(Array) (Line: 379) Twig\Template->render(Array) (Line: 38) Twig\TemplateWrapper->render(Array) (Line: 39) twig_render_template('modules/custom/easytax_calculators/templates/ecp-calculator-page.html.twig', Array) (Line: 348) Drupal\Core\Theme\ThemeManager->render('ecp_calculator_page', Array) (Line: 480) Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 240) Drupal\Core\Render\Renderer->render(Array, ) (Line: 238) Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 627) Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 231) Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 128) Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90) Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object) call_user_func(Array, Object, 'kernel.view', Object) (Line: 111) Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 186) Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 76) Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58) Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48) Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 28) Drupal\Core\StackMiddleware\ContentLength->handle(Object, 1, 1) (Line: 32) Drupal\big_pipe\StackMiddleware\ContentLength->handle(Object, 1, 1) (Line: 191) Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128) Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82) Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48) Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51) Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 36) Drupal\Core\StackMiddleware\AjaxPageState->handle(Object, 1, 1) (Line: 51) Drupal\Core\StackMiddleware\StackedHttpKernel->handle(Object, 1, 1) (Line: 704) Drupal\Core\DrupalKernel->handle(Object) (Line: 21)Deprecated function: Creation of dynamic property Drupal\tablefield\Plugin\Field\FieldFormatter\TablefieldFormatter::$ModuleHandler is deprecated in Drupal\tablefield\Plugin\Field\FieldFormatter\TablefieldFormatter->__construct() (line 57 of modules/contrib/tablefield/src/Plugin/Field/FieldFormatter/TablefieldFormatter.php).
Drupal\tablefield\Plugin\Field\FieldFormatter\TablefieldFormatter->__construct('tablefield', Array, Object, Array, 'hidden', 'default', Array, Object, Object) (Line: 64) Drupal\tablefield\Plugin\Field\FieldFormatter\TablefieldFormatter::create(Object, Array, 'tablefield', Array) (Line: 64) Drupal\Core\Field\FormatterPluginManager->createInstance('tablefield', Array) (Line: 126) Drupal\Core\Field\FormatterPluginManager->getInstance(Array) (Line: 205) Drupal\Core\Entity\Entity\EntityViewDisplay->getRenderer('field_calc_table') (Line: 241) Drupal\Core\Entity\Entity\EntityViewDisplay->buildMultiple(Array) (Line: 339) Drupal\Core\Entity\EntityViewBuilder->buildComponents(Array, Array, Array, 'default') (Line: 281) Drupal\Core\Entity\EntityViewBuilder->buildMultiple(Array) (Line: 18) Drupal\paragraphs\ParagraphViewBuilder->buildMultiple(Array) (Line: 238) Drupal\Core\Entity\EntityViewBuilder->build(Array) call_user_func_array(Array, Array) (Line: 111) Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 859) Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 421) Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 240) Drupal\Core\Render\Renderer->render(Array) (Line: 475) Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 68) __TwigTemplate_291debf4453c7ba2e34da4fa4cd83699->doDisplay(Array, Array) (Line: 394) Twig\Template->displayWithErrorHandling(Array, Array) (Line: 367) Twig\Template->display(Array) (Line: 379) Twig\Template->render(Array) (Line: 38) Twig\TemplateWrapper->render(Array) (Line: 39) twig_render_template('themes/techprosolutions/templates/field/field.html.twig', Array) (Line: 348) Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 480) Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 240) Drupal\Core\Render\Renderer->render(Array) (Line: 475) Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 111) __TwigTemplate_ff95cc8dbd011c21d5f5e7f83f8118b4->doDisplay(Array, Array) (Line: 394) Twig\Template->displayWithErrorHandling(Array, Array) (Line: 367) Twig\Template->display(Array) (Line: 379) Twig\Template->render(Array) (Line: 38) Twig\TemplateWrapper->render(Array) (Line: 39) twig_render_template('modules/custom/easytax_calculators/templates/ecp-calculator-page.html.twig', Array) (Line: 348) Drupal\Core\Theme\ThemeManager->render('ecp_calculator_page', Array) (Line: 480) Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 240) Drupal\Core\Render\Renderer->render(Array, ) (Line: 238) Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 627) Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 231) Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 128) Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90) Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object) call_user_func(Array, Object, 'kernel.view', Object) (Line: 111) Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 186) Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 76) Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58) Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48) Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 28) Drupal\Core\StackMiddleware\ContentLength->handle(Object, 1, 1) (Line: 32) Drupal\big_pipe\StackMiddleware\ContentLength->handle(Object, 1, 1) (Line: 191) Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128) Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82) Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48) Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51) Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 36) Drupal\Core\StackMiddleware\AjaxPageState->handle(Object, 1, 1) (Line: 51) Drupal\Core\StackMiddleware\StackedHttpKernel->handle(Object, 1, 1) (Line: 704) Drupal\Core\DrupalKernel->handle(Object) (Line: 21)Warning: Undefined array key "caption" in Drupal\tablefield\Plugin\Field\FieldFormatter\TablefieldFormatter->viewElements() (line 150 of modules/contrib/tablefield/src/Plugin/Field/FieldFormatter/TablefieldFormatter.php).
Drupal\tablefield\Plugin\Field\FieldFormatter\TablefieldFormatter->viewElements(Object, 'en') (Line: 91) Drupal\Core\Field\FormatterBase->view(Object, 'en') (Line: 268) Drupal\Core\Entity\Entity\EntityViewDisplay->buildMultiple(Array) (Line: 339) Drupal\Core\Entity\EntityViewBuilder->buildComponents(Array, Array, Array, 'default') (Line: 281) Drupal\Core\Entity\EntityViewBuilder->buildMultiple(Array) (Line: 18) Drupal\paragraphs\ParagraphViewBuilder->buildMultiple(Array) (Line: 238) Drupal\Core\Entity\EntityViewBuilder->build(Array) call_user_func_array(Array, Array) (Line: 111) Drupal\Core\Render\Renderer->doTrustedCallback(Array, Array, 'Render #pre_render callbacks must be methods of a class that implements \Drupal\Core\Security\TrustedCallbackInterface or be an anonymous function. The callback was %s. See https://www.drupal.org/node/2966725', 'exception', 'Drupal\Core\Render\Element\RenderCallbackInterface') (Line: 859) Drupal\Core\Render\Renderer->doCallback('#pre_render', Array, Array) (Line: 421) Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 240) Drupal\Core\Render\Renderer->render(Array) (Line: 475) Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 68) __TwigTemplate_291debf4453c7ba2e34da4fa4cd83699->doDisplay(Array, Array) (Line: 394) Twig\Template->displayWithErrorHandling(Array, Array) (Line: 367) Twig\Template->display(Array) (Line: 379) Twig\Template->render(Array) (Line: 38) Twig\TemplateWrapper->render(Array) (Line: 39) twig_render_template('themes/techprosolutions/templates/field/field.html.twig', Array) (Line: 348) Drupal\Core\Theme\ThemeManager->render('field', Array) (Line: 480) Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 240) Drupal\Core\Render\Renderer->render(Array) (Line: 475) Drupal\Core\Template\TwigExtension->escapeFilter(Object, Array, 'html', NULL, 1) (Line: 111) __TwigTemplate_ff95cc8dbd011c21d5f5e7f83f8118b4->doDisplay(Array, Array) (Line: 394) Twig\Template->displayWithErrorHandling(Array, Array) (Line: 367) Twig\Template->display(Array) (Line: 379) Twig\Template->render(Array) (Line: 38) Twig\TemplateWrapper->render(Array) (Line: 39) twig_render_template('modules/custom/easytax_calculators/templates/ecp-calculator-page.html.twig', Array) (Line: 348) Drupal\Core\Theme\ThemeManager->render('ecp_calculator_page', Array) (Line: 480) Drupal\Core\Render\Renderer->doRender(Array, ) (Line: 240) Drupal\Core\Render\Renderer->render(Array, ) (Line: 238) Drupal\Core\Render\MainContent\HtmlRenderer->Drupal\Core\Render\MainContent\{closure}() (Line: 627) Drupal\Core\Render\Renderer->executeInRenderContext(Object, Object) (Line: 231) Drupal\Core\Render\MainContent\HtmlRenderer->prepare(Array, Object, Object) (Line: 128) Drupal\Core\Render\MainContent\HtmlRenderer->renderResponse(Array, Object, Object) (Line: 90) Drupal\Core\EventSubscriber\MainContentViewSubscriber->onViewRenderArray(Object, 'kernel.view', Object) call_user_func(Array, Object, 'kernel.view', Object) (Line: 111) Drupal\Component\EventDispatcher\ContainerAwareEventDispatcher->dispatch(Object, 'kernel.view') (Line: 186) Symfony\Component\HttpKernel\HttpKernel->handleRaw(Object, 1) (Line: 76) Symfony\Component\HttpKernel\HttpKernel->handle(Object, 1, 1) (Line: 58) Drupal\Core\StackMiddleware\Session->handle(Object, 1, 1) (Line: 48) Drupal\Core\StackMiddleware\KernelPreHandle->handle(Object, 1, 1) (Line: 28) Drupal\Core\StackMiddleware\ContentLength->handle(Object, 1, 1) (Line: 32) Drupal\big_pipe\StackMiddleware\ContentLength->handle(Object, 1, 1) (Line: 191) Drupal\page_cache\StackMiddleware\PageCache->fetch(Object, 1, 1) (Line: 128) Drupal\page_cache\StackMiddleware\PageCache->lookup(Object, 1, 1) (Line: 82) Drupal\page_cache\StackMiddleware\PageCache->handle(Object, 1, 1) (Line: 48) Drupal\Core\StackMiddleware\ReverseProxyMiddleware->handle(Object, 1, 1) (Line: 51) Drupal\Core\StackMiddleware\NegotiationMiddleware->handle(Object, 1, 1) (Line: 36) Drupal\Core\StackMiddleware\AjaxPageState->handle(Object, 1, 1) (Line: 51) Drupal\Core\StackMiddleware\StackedHttpKernel->handle(Object, 1, 1) (Line: 704) Drupal\Core\DrupalKernel->handle(Object) (Line: 21)
Loan EMI Calculator
Know your monthly instalment before you sign — loan amount, rate and tenure in, EMI, total interest and a year-wise repayment schedule out.
Year-wise repayment
| Year | Principal | Interest | Balance |
|---|---|---|---|
| 1 | ₹1,65,830 | ₹83,270 | ₹8,34,170 |
| 2 | ₹1,81,386 | ₹67,714 | ₹6,52,784 |
| 3 | ₹1,98,401 | ₹50,699 | ₹4,54,383 |
| 4 | ₹2,17,013 | ₹32,088 | ₹2,37,370 |
| 5 | ₹2,37,370 | ₹11,730 | ₹0 |
What is an EMI?
An equated monthly instalment (EMI) is the fixed amount a loan costs you — the same rupee amount every month until the loan closes. Inside each EMI the mix shifts: the first instalments are mostly interest on the full balance, the last ones are almost entirely principal. The rupee amount never changes; only its composition does.
This calculator works for any reducing-balance loan — home, car, personal, business or anything else with a fixed EMI. Enter the amount, rate and tenure; it returns the monthly EMI, the total interest over the full tenure, the total you will repay, a principal-versus-interest split and a year-wise repayment schedule showing the balance falling to zero.
The EMI formula
EMI = P × r × (1 + r)ⁿ ÷ ((1 + r)ⁿ − 1)
- P — the loan amount (principal)
- r — the monthly interest rate: annual rate ÷ 12 ÷ 100
- n — the number of monthly instalments (tenure in months)
This is the reducing-balance convention every bank uses: interest accrues each month on the balance still outstanding, so early EMIs are interest-heavy and later ones repay mostly principal. At a zero rate the EMI degrades to a flat principal split. The year-wise schedule under the widget buckets the instalments into 12-month windows whose closing balance lands exactly on zero.
How to use this calculator
- Enter the loan amount — anywhere from ₹1 lakh to ₹5 crore; the box and slider stay in sync.
- Set the interest rate with the slider (5–20% p.a., in 0.05% steps). Use the rate your lender actually quoted, not an advertised floor.
- Set the loan tenure in years and months — up to 30 years. A 5-year-6-month tenure is 66 instalments, and the maths handles the odd months exactly.
- Read the three results: monthly EMI, total interest and total payment. The doughnut shows how much of everything you repay is principal versus interest.
- Open the year-wise repayment table to see, for each year, the principal repaid, the interest paid and the closing balance.
A worked example
₹10,00,000 at 9% p.a. for 5 years:
- Monthly EMI: ₹20,758.36 for 60 months
- Total interest: ₹2,45,501.31
- Total payment: ₹12,45,501.31 — 80.3% principal, 19.7% interest
In the first year, ₹83,270.23 of your payments is interest and only ₹1,65,830.02 reduces the loan — the balance after 12 EMIs is still ₹8,34,169.98. That interest-first pattern is normal for every reducing-balance loan.
EMI per ₹1 lakh borrowed
| Tenure | 8% p.a. | 9% p.a. | 10% p.a. | 12% p.a. |
|---|---|---|---|---|
| 1 year | ₹8,699 | ₹8,745 | ₹8,792 | ₹8,885 |
| 3 years | ₹3,134 | ₹3,180 | ₹3,227 | ₹3,321 |
| 5 years | ₹2,028 | ₹2,076 | ₹2,125 | ₹2,224 |
| 10 years | ₹1,213 | ₹1,267 | ₹1,322 | ₹1,435 |
| 15 years | ₹956 | ₹1,014 | ₹1,075 | ₹1,200 |
| 20 years | ₹836 | ₹900 | ₹965 | ₹1,101 |
Multiply by the lakhs you borrow: ₹10 lakh at 9% for 5 years is roughly 10 × ₹2,076 ≈ ₹20,758 a month. Figures come from the same reducing-balance engine as the widget, rounded to the rupee.
Tenure is the biggest lever
Stretching the tenure lowers the EMI but raises the total cost — and the effect is bigger than most borrowers expect. The same ₹10,00,000 at 9% costs ₹20,758.36 a month over 5 years with ₹2,45,501.31 of interest; over 10 years the EMI drops to ₹12,667.58 but the interest more than doubles to ₹5,20,109.29.
A practical approach: pick the shortest tenure whose EMI you can pay comfortably even in a bad month, and use windfalls to prepay. The loan prepayment calculator linked below shows what each lumpsum saves.
With the standard reducing-balance formula: EMI = P × r × (1 + r)ⁿ ÷ ((1 + r)ⁿ − 1), where r is the annual rate ÷ 12 ÷ 100 and n is the tenure in months. Interest accrues each month on the outstanding balance, so the interest share of the EMI falls as the loan is repaid. This is the same convention banks and NBFCs use for fixed-EMI loans.
Because interest is charged on the balance still outstanding, and at the start that balance is the whole loan. On ₹10,00,000 at 9% for 5 years, about a third of the first-year payments is interest; by the final year almost the entire EMI is principal. Longer tenures push this skew further — on a 20-year loan the early years barely dent the principal.
Yes. The duration input takes both parts, and the engine works instalment by instalment — 5 years 6 months is 66 EMIs, and ₹10,00,000 at 9% over that tenure costs ₹19,265.24 a month with ₹2,71,505.91 of total interest. The last schedule row is simply a shorter 6-month bucket.
No. The calculator prices the loan itself — principal and interest only. Processing fees (typically 0.5–2% of the amount), documentation charges, and any bundled insurance are paid separately and are worth comparing across lenders, because they can outweigh a small rate difference on short loans.
On a fixed-rate loan, no. On a floating-rate loan, lenders usually keep the EMI constant and stretch or shorten the tenure when the benchmark rate moves — though you can ask for the EMI to be reset instead. Re-run the calculator with the new rate to see the effect.
It depends on the loan, not the EMI itself. Home loans (Section 24(b) interest, Section 80C principal) and education loans (Section 80E interest) carry deductions under the old regime; plain personal or car loans for private use carry none. Under the default new regime for FY 2025-26 these deductions are not available — though income up to ₹12 lakh (₹12.75 lakh for salaried taxpayers) is already tax-free there via the Section 87A rebate.
