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

  1. Enter the loan amount — anywhere from ₹1 lakh to ₹5 crore; the box and slider stay in sync.
  2. 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.
  3. 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.
  4. Read the three results: monthly EMI, total interest and total payment. The doughnut shows how much of everything you repay is principal versus interest.
  5. 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.

EMI questions, answered

Quick answers on how the maths works, what the EMI does and does not include, and where tax fits in.