Java : Comment convertir un nombre en toutes lettres

 Article modifié dernièrement le 28 Fév 2013 @ 1 h 01 min

Lorsque je remplis un chèque je dois généralement me faire violence pour bien convertir le montant en toutes lettres. Je ne sais jamais bien où on doit placer un trait d’union ou un s, alors imaginer un programme qui le fasse automatiquement pour vous selon la langue souhaitée, c’est limite impensable et pourtant !out d’abord voici les grandes lignes qu’il faut connaître avant de convertir un nombre en toutes lettres en français.

Algorithme

Les mots simples

Certains nombres s’écrivent simplement avec un seul mot :

  • les nombres jusqu’à 16 : zéro, un, deux, trois, quatre, cinq, six, sept, huit, neuf, dix, onze, douze, treize, quatorze, quinze et seize.
  • puis les dizaines jusqu’à 60 : vingt, trente, quarante, cinquante et soixante.
  • et enfin 100 et 1000 : cent et mille.

Les mots composés

Lorsqu’il n’est pas possible d’écrire un mot simple, on compose les nombres avec plusieurs mots simples. Se pose alors le problème du trait d’union.

Prennent un trait d’union tous les nombres composés inférieurs à 100 ne se terminant pas en 1 sauf 81 et 91 :

  • dix-sept, quarante-huit…
  • quatre cent cinquante-trois…

Pour les nombres se terminant en 1, on ajoute la conjonction et :

  • soixante et un
  • soixante et onze
  • cinquante et un

81 et 91 sont écrits avec un trait d’union:

  • quatre-vingt-un
  • quatre-vingt-onze

Les accords

20 et 100 s’accordent quand ils sont multipliés par un nombre sans être suivis par un autre nombre.

  • quatre-vingts
  • quatre-vingt-trois
  • quatre cents
  • quatre cent vingt et un

Mille est toujours invariable

  • trois mille
  • dix mille deux

un est invariable en nombre mais pas en genre :

  • cinquante et une pages

Millier, million et milliard sont des noms et non des adjectifs. Ils ne font pas vraiment partie du nombre et laissent place à l’accord :

  • quatre cents millions
  • deux cent mille
  • deux cents milliers

Mille peut s’écrire mil mais seulement dans une date.

  • l’an mil quatre cent trois

Certains de ces adjectifs numéraux cardinaux peuvent avoir une valeur ordinale pour exprimer l’année, le jour, les parties d’un ouvrage, le numéro d’une rue, le nom d’un souverain… ils restent alors invariables :

  • l’année mille neuf cent (la 1900e)
  • le quinze juin (le quinzième jour de juin)
  • la page quatre-vingt (80e)
  • le tome deux
  • habiter au cinquante-huit
  • Louis quatorze, Charles dix…

Le pluriel commence à partir de 2. on écrit ainsi :

  • 1,9 point
  • 2 points
  • 1,9 million
  • 2 millions

Outils en ligne

Certes ces outils en ligne ne vont pas trop aider à faire son chèque chez le médecin (à moins de s’y rendre avec son SmartPhone discrétos …) néanmoins ils ont le mérite d’exister et peuvent être d’une grande aide.

http://www.dcode.fr/ecrire-nombre-chiffre-lettres, cet outil permet de :

  • convertir un nombre en toutes lettres (25689 : vingt-cinq mille six cent quatre-vingt-neuf)
  • convertir des nombres en toutes lettres en chiffres(quatre cent cinquante six : 456)
  • dire si un nombre est simple ou composé (48 : 12 lettres et 2 mots)

http://www.leconjugueur.com/frnombre.php, cet outil permet de :

  • convertir un nombre en toutes lettres (123456,45 : cent vingt-trois mille quatre cent cinquante-six virgule quarante-cinq)
  • d’intégrer les particularités locales belges et suisse dans la conversion (1996 : mille neuf cent nonante-six)

Implémentation Java

Code source

Certains se sont lancés dans l’implémentation Java et proposent un résultat plutôt correct. Le code source ci-dessous permet de convertir un nombre en toutes lettres en français et en anglais. Ce sont deux algorithmes différents car pour la langue française c’est toujours un peu plus compliqué, les subtilités sont plus nombreuses.

Il y a certainement moyen d’optimiser ce code mais c’est une bonne piste et un bon début.

Voici le lien vers ce code source : Convert number into words.

Bibliothèque

Voici quelque chose qui m’intéresse d’autant plus, une bibliothèque open source Java prête à l’emploi et mise à disposition par le biais du site http://site.icu-project.org (International Components for Unicode).

Le site propose même une page de démonstration qui a l’avantage d’être multi-locales, c’est à dire qu’il ne suffit pas de saisir le nombre à convertir, il faut aussi choisir la locale de la langue souhaitée : fr_FR pour le français, en_US pour l’anglais, de_DE pour l’allemand, etc.

Ce .jar est téléchargeable directement ici et son utilisation est extrêmement simple :

Petit bémol cependant au niveau des nombres à virgules, j’ai l’impression que la traduction après la virgule est moyenne … à part ça c’est tout à fait étonnant, tout y est, même les recommandations orthographique de 1990 (« Tous les numéraux composés sont unis par un trait d’union : trois-cent-vingt-quatre« ).

Il est même possible d’obtenir le nombre en chiffres romains : 1958 -> MCMLVIII.

Cette bibliothèque permet de remplacer tous nos petits bouts de code fait-maison qui ont fleuri un peu partout dans nos applications (j’en ai l’exemple sur mon projet pro actuel).

Astuce

Il est possible d’utiliser des fonctions spécifiques de sa base de données pour obtenir la conversion d’un nombre en toutes lettres mais uniquement en anglais (exemple ici sous Oracle) :

Trois flèches vers le bas

1- Logiciel de brouillage d’adresse IP :

Contourner la censure en surfant anonyme

2- L’article explicatif :

La différence entre un proxy et un VPN

3- Comment espionner un smartphone (app) :

L’application de référence

Commentez ici

  • Greg 22 novembre 2010, 17 05

    En effet c’est le genre de choses qui peuvent être utiles. Merki pour les sources.

  • Mimie 22 novembre 2010, 21 09

    Oui c’est une chose très utile lorsqu’il faut trouver un moyen d’écrire en toutes lettres des montants sur un document pdf ou word qu’on doit générer dynamiquement 🙂
    Une super chose cette bibliothèque icu4j.

  • Anonyme 30 septembre 2014, 7 07

    multiplication

  • Lion 27 janvier 2017, 14 02

    Vraiment très utile. Merci

Article suivant:

Article précédent:

Share This