Simple interest calculator
Find any piece of the simple-interest formula from the other three: 1000 at 5 % for 2 years earns 100 of interest, for a total of 1100. You can also solve for the principal, the rate or the time. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Worked example
- Principal amount
- 1,000
- Interest rate
- 5
- Time
- 2
- Rate (%)
- 5
- Time (years)
- 2
- Interest amount
- 100
- Amount
- 1,100
Solves the simple-interest relationship I = P * r * t for any one of interest, principal, rate or time, given the other three, and returns the total amount P + I.
One formula, four unknowns
Simple interest follows a single relationship: interest equals principal times the annual rate times the time in years. A principal of 1000 at 5 % for 2 years earns 100 of interest, for a total of 1100. The same equation can be rearranged to find whichever value is missing: the principal is the interest divided by rate times time, the rate is the interest divided by principal times time, and the time is the interest divided by principal times rate. Pick the unknown and enter the other three; the result always shows the full picture, including the total amount.
Rates, time units and the usual mistakes
The rate is read as a percentage by default, so 5 means 5 %; if you already have a decimal such as 0.05, switch that option off rather than typing 0.05 as a percentage. Time can be given in years, months or days: months are divided by 12, and days by 365 or by 360 under the 30/360 banking convention, so a yearly rate stays consistent. Simple interest never earns interest on interest, which is what separates it from compound interest. A calculation that would divide by zero, such as finding the principal when the rate or the time is zero, is refused instead of returning infinity.
One equation, four things to solve for
Simple interest is the relationship I = P * r * t, where P is the principal, r is the annual rate as a decimal, and t is time in years. You supply the other three values. The worked example, principal 1000 at rate 5 for time 2, gives interest 100 and amount 1100.
What you can do with it
Find the interest on a loan
Default mode: enter principal, annual rate and term to get the interest owed and the total repayment amount.
FAQ
What can it solve for?
Any one of interest, principal, rate or time from I = P * r * t, given the other three.
This is simple, not compound, interest?
Yes. Interest is computed only on the principal, not on accrued interest.
How do I enter a period in months or days?
Choose months or days as the time unit. Months are divided by 12 to get years, and days by 365 by default, so a yearly rate stays consistent whatever unit you use.
Should I use 365 or 360 days?
365 is the actual day count and the default; 360 is the 30/360 banking convention. The choice only matters when the time is given in days, so pick the one your contract uses.
How do I find the rate I am being charged?
Solve for the rate and enter the interest, the principal and the time. The rate is the interest divided by principal times time, so 100 of interest on 1000 over 2 years means 5 %.
Related tools
For developers — API access
Everything on this page is available programmatically. This section is for teams who want to wire it into their own systems; everyone else can just use the tool above.
API endpoint
Prefer to automate it? One authenticated POST creates the task; the result comes back by webhook or a signed link. The same capability also runs here on the web, by email and from Telegram — and soon from our app too.
Call it from your stack
curl -X POST https://api.kit.forhosting.com/dev/simple-interest \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"principal":1000,"rate":5,"time":2}'const res = await fetch("https://api.kit.forhosting.com/dev/simple-interest", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"principal": 1000,
"rate": 5,
"time": 2
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/dev/simple-interest",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"principal": 1000,
"rate": 5,
"time": 2
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/dev/simple-interest", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"principal":1000,"rate":5,"time":2}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"principal":1000,"rate":5,"time":2}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/dev/simple-interest", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"principal": 1000,
"rate": 5,
"time": 2
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "dev.simple_interest",
"status": "queued",
"_links": {
"result": "/tasks/tsk_…/result"
}
}The API is asynchronous: the call returns a task_id immediately and the result arrives by webhook. Polling is capped at 1 req/s per task.
Pricing
Published price — no tokens, no invented credits. A failed task is never charged.
Errors
| HTTP | Code | Meaning |
|---|---|---|
401 | unauthorized | Missing or invalid API key. |
402 | insufficient_balance | Your balance doesn't cover the task price. |
404 | unknown_type | That task type doesn't exist. |
429 | rate_limited | Too many requests. Use the webhook instead of polling. |
Technical notes
One equation, four things to solve for
This tool rearranges that single equation to solve for whichever unknown you pick with solve_for: "interest" (the default) computes I = P * r * t; "principal" computes P = I / (r * t); "rate" computes r = I / (P * t); and "time" computes t = I / (P * r). Whatever you solve for, the response always returns the full picture: principal, rate_percent, time_years, interest, amount (which is P + I), and the solve_for you chose; when solving for time it also returns time in your requested unit.
Rate, time units and day count
The rate field is read as a percentage by default (rate_is_percent true), so 5 means 5% and is divided by 100 internally; set rate_is_percent false to pass an already-decimal rate like 0.05. Time is interpreted through time_unit, an enum of "years" (default), "months", or "days": months are divided by 12 and days by day_count to convert to years, so a rate expressed per annum stays consistent. The day_count field is an enum restricted to 365 (actual/365, the default) or 360 (the 30/360 banking convention), which matters when time_unit is "days". Any division by zero that a chosen solve would require, for instance solving for principal when r * t is 0, is caught and returned as a typed invalid_input error rather than producing infinity.
Validation, rounding and delivery
Each mode validates only the inputs it needs and requires them to be finite numbers: solving for interest, rate or time requires a strictly positive principal, while every mode requires the fields that feed its formula. The decimals field is an integer from 0 to 8 and defaults to 2; principal, rate_percent, interest and amount are rounded half-up to that precision, and time_years is always returned at 6 decimals for internal consistency.
Integration use cases
Back out an unknown value
Set solve_for to principal, rate or time to reverse the equation, for example finding the rate that turns a known principal and interest into a target return.
Work in days with a banking convention
Use time_unit days with day_count 360 to match a 30/360 lender, or 365 for actual/365, without converting the term by hand.
Technical questions
Is the rate a percentage or a decimal?
A percentage by default (5 means 5%). Set rate_is_percent false to pass a decimal like 0.05.
How are months and days handled?
time_unit converts them to years: months divided by 12, days divided by day_count (365 or 360).
What if a value would divide by zero?
Modes that would divide by zero, such as solving for principal when rate or time is 0, return a typed invalid_input error instead of infinity.