Italian number to words
21 becomes ventuno, not ventiuno: the converter spells whole numbers from 0 to 999999 in Italian, dropping the vowels Italian drops and choosing mille or mila for the thousands. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Worked example
- N
- 21
- Language
- it
- Words
- ventuno
Integer 0..999999 to Italian cardinals. Search intent: number to words italian. No network calls or random seeds are required. Failed jobs are not billed.
How Italian spells its numbers
Italian builds its numbers from left to right, in the order they are read: hundreds, then tens, then units, all fused into a single word. Cento covers the hundreds and mille the first thousand, while larger thousands switch to the plural mila. One small rule causes most of the doubt: when a ten meets uno or otto it loses its final vowel, which is why 21 is ventuno. The converter applies these rules to any whole number from 0 to 999999 and returns the complete word, ready to copy into a document or an exercise.
Where numbers in letters are needed, and common errors
Written-out numbers appear in formal Italian documents, in school exercises and in any text where a figure must be impossible to misread. Learners and teachers use the converter to check a spelling in seconds. Typical errors are keeping the vowel, as in ventiuno, splitting the number into separate words, and using mille where the plural mila is required. Because the same fixed rules produce every result, a number always comes back with the same spelling, which makes the output dependable for worked solutions.
What you can do with it
Teaching
Pinned goldens.
FAQ
Why do some Italian tens lose their last vowel?
Because a ten is elided before uno and otto: venti plus uno becomes ventuno. The converter applies that rule to every ten from twenty to ninety, so the vowel disappears exactly where written Italian drops it.
When is it mille and when is it mila?
Mille is used only for one thousand on its own. From two thousand upward the thousands take the plural form mila, attached directly to the number of thousands in front of it, all in a single word.
Which numbers can I write out in Italian?
Whole numbers from 0 to 999999. Values with decimals, negative numbers and anything larger are not converted, so every answer is a complete Italian cardinal number inside that range.
Is the result one word or several?
One word. In this range Italian writes hundreds, tens and units together without spaces, and the converter does the same, giving the form used when a number has to be spelled out in full.
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/math/number-to-words-it \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"n":21}'const res = await fetch("https://api.kit.forhosting.com/math/number-to-words-it", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"n": 21
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/math/number-to-words-it",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"n": 21
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/math/number-to-words-it", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"n":21}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"n":21}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/math/number-to-words-it", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"n": 21
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "math.number_to_words_it",
"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
The calculator is free in the browser, deterministic, and identical on the API path. Inputs are validated before arithmetic so invalid payloads fail with invalid_input. Half-up rounding is applied once from raw IEEE values when decimals are requested. Use the same JSON from spreadsheets, CMS hooks, automation, or teaching demos.
How it works
Integer 0..999999 to Italian cardinals. ventuno; mille/mila compounding. No network calls or random seeds are required. Failed jobs are not billed. No network calls or random seeds are required. Failed jobs are not billed. The calculator is free in the browser, deterministic, and identical on the API path. Inputs are validated before arithmetic so invalid payloads fail with invalid_input. Half-up rounding is applied once from raw IEEE values when decimals are requested. Use the same JSON from spreadsheets, CMS hooks, automation, or teaching demos. The calculator is free in the browser, deterministic, and identical on the API path. Inputs are validated before arithmetic so invalid payloads fail with invalid_input. Half-up rounding is applied once from raw IEEE values when decimals are requested. Use the same JSON from spreadsheets, CMS hooks, automation, or teaching demos.
Inputs, limits and rounding
Optional decimals use half-up once. Optional output fields are omitted, never null. No network calls or random seeds are required. Failed jobs are not billed. No network calls or random seeds are required. Provide required JSON fields with DOM-safe names. Invalid types raise invalid_input. The calculator is free in the browser, deterministic, and identical on the API path. Inputs are validated before arithmetic so invalid payloads fail with invalid_input. Half-up rounding is applied once from raw IEEE values when decimals are requested. Use the same JSON from spreadsheets, CMS hooks, automation, or teaching demos. The calculator is free in the browser, deterministic, and identical on the API path. Inputs are validated before arithmetic so invalid payloads fail with invalid_input. Half-up rounding is applied once from raw IEEE values when decimals are requested. Use the same JSON from spreadsheets, CMS hooks,
When to use it
Use when search intent matches. Integer 0..999999 to Italian cardinals. EN-only delivery; Nitro hydrates locales. No network calls or random seeds are required. Failed jobs are not billed. No network calls or random seeds are required. Failed jobs are not The calculator is free in the browser, deterministic, and identical on the API path. Inputs are validated before arithmetic so invalid payloads fail with invalid_input. Half-up rounding is applied once from raw IEEE values when decimals are requested. Use the same JSON from spreadsheets, CMS hooks, automation, or teaching demos. The calculator is free in the browser, deterministic, and identical on the API path. Inputs are validated before arithmetic so invalid payloads fail with invalid_input. Half-up rounding is applied once from raw IEEE values when decimals are requested. Use the same JSON from spreadsheets, CMS hooks, automation, or teaching demos.
Integration use cases
Quick check
Free widget.
Automation
API same JSON.
Technical questions
Free?
Yes tier A.
Network?
No.
Bad input?
invalid_input.
API?
Yes.
Locales?
EN-only; Nitro hydrates.