French words to number
Type a French number in words and get it in digits: “vingt et un” becomes 21. It reads whole numbers from zéro up to 999, with or without hyphens. Free in your browser.
- Free
- Runs in your browser
- No sign-up
- Your data stays on your device
Run — free
Worked example
- Text
- vingt et un
- N
- 21
Parse simple French cardinals 0..999 into an integer. Search intent: words to number french. No network calls or random seeds are required. Failed jobs are not billed.
Reading French number words
French writes numbers with a small set of words that combine: units, tens, the joining word “et”, hyphens and “cent” for hundreds. This tool reads a French cardinal written in words and gives you back the same number in digits, from zéro to 999. Each word is matched to its value, hyphens and “et” are treated as simple joins, and “cent” multiplies the part in front of it. So “vingt et un” becomes 21, exactly as a French speaker would read it aloud. Anything that is not a valid French number is checked before the reading starts and refused with a clear message.
Where it helps and what to watch for
It is handy for teaching and practice: a learner can write a number in words and confirm the digits, and a teacher can check a list of answers quickly. The most common stumbling block is the joins. Some numbers are written with “et” and others with a hyphen, and the two are easy to mix up; here both spellings are accepted, so you can focus on the words themselves. Keep the range in mind: the tool covers cardinals up to 999 and returns a whole number, so anything larger needs another method.
When to use it
Use when search intent matches. Parse simple French cardinals 0..999 into an integer. English-only delivery; Nitro hydrates other 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 billed.
What you can do with it
Teaching
Pinned goldens.
FAQ
Which French numbers can it read?
Whole numbers from zéro to 999, written out in words. It returns a single integer, so ordinals and amounts with decimals are outside its scope.
Does it matter if I write hyphens or “et”?
No. Hyphens and the word “et” are smoothed out before reading, so “vingt et un” and “vingt-et-un” both give 21. You can write the number the way you learned it.
How does it read the word “cent”?
“Cent” multiplies the part in front of it, so “deux cents” is read as two times a hundred. Whatever follows is then added, the way the number is said aloud.
What happens if the words are not a French number?
The tool refuses them and tells you so instead of guessing. Check the spelling, or whether the number goes beyond 999, and try again.
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/words-to-number-fr \
-H "Authorization: Bearer $KIT_KEY" \
-H "Content-Type: application/json" \
-d '{"text":"vingt et un"}'const res = await fetch("https://api.kit.forhosting.com/math/words-to-number-fr", {
method: "POST",
headers: {
"Authorization": `Bearer ${process.env.KIT_KEY}`,
"Content-Type": "application/json"
},
body: JSON.stringify({
"text": "vingt et un"
})
});
const { task_id } = await res.json();import os, requests
res = requests.post(
"https://api.kit.forhosting.com/math/words-to-number-fr",
headers={"Authorization": f"Bearer {os.environ['KIT_KEY']}"},
json={
"text": "vingt et un"
},
)
task_id = res.json()["task_id"]<?php
$res = file_get_contents("https://api.kit.forhosting.com/math/words-to-number-fr", false, stream_context_create([
"http" => [
"method" => "POST",
"header" => "Authorization: Bearer " . getenv("KIT_KEY") . "\r\nContent-Type: application/json",
"content" => '{"text":"vingt et un"}',
],
]));
$task = json_decode($res, true);body := bytes.NewBufferString(`{"text":"vingt et un"}`)
req, _ := http.NewRequest("POST", "https://api.kit.forhosting.com/math/words-to-number-fr", body)
req.Header.Set("Authorization", "Bearer "+os.Getenv("KIT_KEY"))
req.Header.Set("Content-Type", "application/json")
res, _ := http.DefaultClient.Do(req)Example request
{
"text": "vingt et un"
}Example response
{
"task_id": "tsk_a1b2c3d4e5f6a1b2c3d4e5f6",
"type": "math.words_to_number_fr",
"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.
How it works
Parse simple French cardinals 0..999 into an integer. Token map with et/hyphen normalization; cent multiplies. 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. 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. The calculator is free in the browser, deterministic, and identical on the API path. Inputs are validated before arithmetic so invalid payloads fail
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. Failed jobs are not billed. 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. 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.
When to use it
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. 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.
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.