Kilometers to miles converter
Divide kilometers by exactly 1.609344 and get statute miles: a 5 km run is about 3.1069 miles and 100 km about 62.1371 miles. Built for US road trips, odometers and race plans, with no rounded shortcut. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Worked example
- Kilometers
- 5
- Result
- 3.1068559612
- Miles
- 3.1068559612
- Factor
- 0.6213711922
- Km per mile
- 1.609344
A kilometers-to-miles converter turns a metric distance into the statute mile figure still used on United States road signs, vehicle odometers, running apps set to imperial units, and logistics contracts that quote last-mile haul in miles. Enter a finite, non-negative length in kilometers. The tool divides by the exact international definition that one mile equals one point six zero nine three four four kilometers and returns the mile magnitude together with the conversion factor and a readable formula. Approximate mental shortcuts such as multiply by zero point six two are not used.
The exact international mile and why 1.609344 is not a guess
When a distance is already in kilometers and you need statute miles, the conversion is a single exact division, not a table lookup and not a rounded classroom shortcut. One international mile is defined as exactly one thousand six hundred nine point three four four metres, which is exactly one point six zero nine three four four kilometers. That definition comes from the 1959 international yard and pound agreement that aligned English-speaking countries on a shared inch, yard, and mile.
Therefore miles equals kilometers divided by one point six zero nine three four four, and the reciprocal factor is one over that constant. A five kilometer training run is about three point one zero six nine miles; a ten kilometer race is about six point two one three seven miles; a marathon of forty-two point one nine five kilometers is about twenty-six point two one eight eight miles; one hundred kilometers is about sixty-two point one three seven one miles.
The popular mental shortcut of multiplying by zero point six two is close enough for a rough estimate and wrong enough to fail a homework check or a logistics service-level agreement. This tool never uses that shortcut, never switches to a United States survey mile, and never accepts a unit string such as the letters km glued onto the number. Zero kilometers converts to zero miles, which is a valid origin or rest reading.
Non-finite values, missing fields, and empty strings fail the same way.
What you can do with it
Road trip and logistics planning
Turn metric route distances from map APIs into statute miles for United States trip estimates, fuel budgets, and delivery agreements with the same exact factor on every row.
Race and training distance checks
Runners and coaches convert five-kilometer, ten-kilometer, and marathon marks to miles and compare hand work against a deterministic result before publishing race guides.
FAQ
How do I convert kilometers to miles?
Send a finite non-negative number in kilometers. Miles equals kilometers divided by 1.609344. Example: 1.609344 km yields 1 mile; 100 km yields about 62.137119223733 miles.
Is 1.609344 exact or approximate?
Exact. One international statute mile is defined as 1.609344 kilometers (1609.344 metres) by the 1959 international yard and pound agreement. This tool does not use a survey mile or a multiply-by-0.62 estimate.
What happens if the kilometer value is negative?
A negative distance is rejected and is not billed. Zero kilometers converts to zero miles.
How many miles is a 10K race or a marathon?
A 10 km race is about 6.2137 miles, and a marathon of 42.195 km is about 26.2188 miles. Both come from the same exact division by 1.609344.
Does it use the US survey mile?
No. It always uses the international mile of exactly 1.609344 km, set by the 1959 yard and pound agreement, and never switches to the US survey mile.
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/conv/kilometers-to-miles \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"kilometers":5}'const res = await fetch("https://api.kit.forhosting.com/conv/kilometers-to-miles", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"kilometers": 5
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/conv/kilometers-to-miles",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"kilometers": 5
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/conv/kilometers-to-miles", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"kilometers":5}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"kilometers":5}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/conv/kilometers-to-miles", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"kilometers": 5
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "conv.kilometers_to_miles",
"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
Negative distances and non-finite values fail with invalid_input instead of inventing a number. Successful calls are billed at $0.002; invalid input is not charged.
The exact international mile and why 1.609344 is not a guess
A negative kilometer value is not a distance in this contract: treating it as a signed delta would silently invert how far something is, so the engine rejects negatives with invalid_input.
Input contract, response shape, and validation
Example: five kilometers yields about three point one zero six eight five six miles after rounding; one point six zero nine three four four kilometers yields exactly one mile. POST a JSON body with one required finite number named kilometers. Aliases km, kilometres, value, and distance are accepted so map exports, race tables, and form posts can use the name that already exists in the source file. The value must be greater than or equal to zero and must stay within one trillion so the division remains finite in IEEE double precision on the Worker and in the browser. On success the body echoes rounded kilometers, sets miles and the synonymous result field to the same rounded mile magnitude, factor to the rounded reciprocal of one point six zero nine three four four, km_per_mile to the exact constant one point six zero nine three four four, and formula to the string miles equals kilometers divided by one point six zero nine three four four. Failed validation—missing fields, empty strings, non-numeric text, NaN, Infinity, a negative distance, or a value outside the published limit—returns invalid_input naming the field and is never charged. Prefer JSON numbers over strings that include unit labels or thousands separators; those extra characters are not parsed. Pricing for a successful item is a flat $0.002.
Where a kilometers-to-miles converter earns its keep
People who type kilometers to miles into a search box already know they want the statute mile figure from a metric distance, not a general multi-unit length hub and not a miles-to-kilometers primary form. Logistics desks convert corridor lengths before quoting a United States last-mile contract. Failed validation does not consume balance. Prefer this capability when the input is already in kilometers and you only need statute miles; if you must convert among many units in one call, use a broader length converter instead. A publisher ranking for that full-word query is serving drivers who received a metric route from a map API, runners who trained in kilometers and need imperial race-day copy, teachers who assign the exact 1959 factor rather than the zero point six two shortcut, and engineers who need a deterministic oracle that rejects a negative distance instead of silently producing a signed mile delta. Classroom unit-conversion worksheets need an oracle that marks a negative or non-numeric submission as invalid_input rather than an empty success. Automation pipelines call the same API contract at $0.002 per successful item without standing up a spreadsheet service. Keep requests small, pin the rounded miles in tests, and you get reproducible kilometer-to-mile arithmetic for homework, race guides, and lightweight travel webhooks.
Integration use cases
Homework and unit-test fixtures
Students and engineers convert classroom kilometer readings to miles and pin golden JSON so the browser widget and the API never disagree, including rejection of a negative distance.
Technical questions
What happens on missing or non-numeric input?
The API returns invalid_input naming the problem (for example a missing kilometers field, or a value that is not a finite number). Failed tasks are not charged.
What does the kilometers to miles converter cost?
The browser tool is free. API requests use prepaid balance at $0.002 per successful call; invalid input is not billed.