Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- <!DOCTYPE html>
- <html>
- <head>
- <title>Numbers to letters</title>
- </head>
- <body>
- <h1>Numbers to letters</h1>
- </body>
- <script>
- let userEntry;
- while ((userEntry = prompt("Renseignez un chiffre entre 0 et 999"))) {
- alert(num2Letters(parseInt(userEntry, 10)));
- }
- function num2Letters(number) {
- if (isNaN(number) || number < 0 || number > 999) {
- // On vérifie l'argument reçu
- return "Veuillez entrer un nombre entier compris entre 0 et 999.";
- } else if (number === 0) {
- // Si c'est 0 on retourne "zéro".
- return "Zéro";
- } else {
- // Tous les autres cas
- // On crée un "dictionnaire" de chiffres en lettres
- let units2Letters = [
- "",
- "un",
- "deux",
- "trois",
- "quatre",
- "cinq",
- "six",
- "sept",
- "huit",
- "neuf",
- "dix",
- "onze",
- "douze",
- "treize",
- "quatorze",
- "quinze",
- "seize",
- "dix-sept",
- "dix-huit",
- "dix-neuf"
- ],
- tens2Letters = [
- "",
- "dix",
- "vingt",
- "trente",
- "quarante",
- "cinquante",
- "soixante",
- "soixante",
- "quatre-vingt",
- "quatre-vingt"
- ];
- // On compte le nombre d'unités, dizaines et centaines à l'aide du modulo
- var units = number % 10,
- tens = ((number % 100) - units) / 10, // On doit soustraire les unités
- hundreds = ((number % 1000) - (number % 100)) / 100; // On doit soustraire les dizaines
- // On fait correspondre le nombre d'unités, dizaines et centaines avec le dictionnaire
- let unitsOut, tensOut, hundredsOut;
- // Unités. On met "et" devant 1 si la dizaine n'est pas 8 (on ne dit pas "quatre-ving-et-un")
- unitsOut =
- (units === 1 && tens > 0 && tens !== 8 ? "et-" : "") +
- units2Letters[units];
- // Dizaines.
- if (tens === 1 && units > 0) {
- // On commence par traiter les chiffres de 11 à 19.
- tensOut = units2Letters[10 + units]; // Avec « 10 + units » on obtient le nombre souhaité entre 11 et 19
- unitsOut = ""; // Ne pas oublier de vider unitsOut qui n'est plus utile.
- } else if (tens === 7 || tens === 9) {
- // On traite les dizaines égales à 7 ou 9. On dit en effet soixante-treize ou quatre-vingt-dix-neuf
- tensOut =
- tens2Letters[tens] +
- "-" +
- (tens === 7 && units === 1 ? "et-" : "") +
- units2Letters[10 + units];
- unitsOut = "";
- } else {
- // Dizaines "normales"
- tensOut = tens2Letters[tens];
- }
- // "Quatre-vingt" sans unité prend un "s" à la fin :
- tensOut += units === 0 && tens === 8 ? "s" : "";
- // Centaines
- hundredsOut =
- (hundreds > 1 ? units2Letters[hundreds] + "-" : "") + // On affiche un chiffre avant "cent" s'il y'a plus d'une centaine.
- (hundreds > 0 ? "cent" : "") + // On affiche "cent" s'il y'a des centaines.
- (hundreds > 1 && tens == 0 && units == 0 ? "s" : ""); // On rajoute un s dan certains cas.
- // On concatène le tout. On met un ternaire pour éviter d'avoir des tirets inutles avant et après
- return (
- hundredsOut +
- (hundredsOut && tensOut ? "-" : "") +
- tensOut +
- ((hundredsOut && unitsOut) || (tensOut && unitsOut) ? "-" : "") +
- unitsOut
- );
- }
- }
- </script>
- </html>
Add Comment
Please, Sign In to add comment