Convertir un nombre en lettre français

Soyez le premier à donner votre avis sur cette source.

Snippet vu 2 652 fois - Téléchargée 7 fois

Contenu du snippet


import java.text.DecimalFormat;

/**
 *
 * @author RICKEN
 */
public class FrenchNumberToWords {

    private static final String[] dizaineNames = {
        "",
        "",
        "vingt",
        "trente",
        "quarante",
        "cinquante",
        "soixante",
        "soixante",
        "quatre-vingt",
        "quatre-vingt"
    };

    private static final String[] uniteNames1 = {
        "",
        "un",
        "deux",
        "trois",
        "quatre",
        "cinq",
        "six",
        "sept",
        "huit",
        "neuf",
        "dix",
        "onze",
        "douze",
        "treize",
        "quatorze",
        "quinze",
        "seize",
        "dix-sept",
        "dix-huit",
        "dix-neuf"
    };

    private static final String[] uniteNames2 = {
        "",
        "",
        "deux",
        "trois",
        "quatre",
        "cinq",
        "six",
        "sept",
        "huit",
        "neuf",
        "dix"
    };

    private FrenchNumberToWords() {
    }

    private static String convertZeroToHundred(int number) {

        int laDizaine = number / 10;
        int lUnite = number % 10;
        String resultat = "";

        switch (laDizaine) {
            case 1:
            case 7:
            case 9:
                lUnite = lUnite + 10;
                break;
            default:
        }

        // s�parateur "-" "et"  ""
        String laLiaison = "";
        if (laDizaine > 1) {
            laLiaison = "-";
        }
        // cas particuliers
        switch (lUnite) {
            case 0:
                laLiaison = "";
                break;
            case 1:
                if (laDizaine == 8) {
                    laLiaison = "-";
                } else {
                    laLiaison = " et ";
                }
                break;
            case 11:
                if (laDizaine == 7) {
                    laLiaison = " et ";
                }
                break;
            default:
        }

        // dizaines en lettres
        switch (laDizaine) {
            case 0:
                resultat = uniteNames1[lUnite];
                break;
            case 8:
                if (lUnite == 0) {
                    resultat = dizaineNames[laDizaine];
                } else {
                    resultat = dizaineNames[laDizaine]
                            + laLiaison + uniteNames1[lUnite];
                }
                break;
            default:
                resultat = dizaineNames[laDizaine]
                        + laLiaison + uniteNames1[lUnite];
        }
        return resultat;
    }

    private static String convertLessThanOneThousand(int number) {

        int lesCentaines = number / 100;
        int leReste = number % 100;
        String sReste = convertZeroToHundred(leReste);

        String resultat;
        switch (lesCentaines) {
            case 0:
                resultat = sReste;
                break;
            case 1:
                if (leReste > 0) {
                    resultat = "cent " + sReste;
                } else {
                    resultat = "cent";
                }
                break;
            default:
                if (leReste > 0) {
                    resultat = uniteNames2[lesCentaines] + " cent " + sReste;
                } else {
                    resultat = uniteNames2[lesCentaines] + " cents";
                }
        }
        return resultat;
    }

    public static String convert(long number) {
        // 0  999 999 999 999
        if (number == 0) {
            return "zéro";
        }

        String snumber = Long.toString(number);

        // pad des "0"
        String mask = "000000000000";
        DecimalFormat df = new DecimalFormat(mask);
        snumber = df.format(number);

        // XXXnnnnnnnnn
        int lesMilliards = Integer.parseInt(snumber.substring(0, 3));
        // nnnXXXnnnnnn
        int lesMillions = Integer.parseInt(snumber.substring(3, 6));
        // nnnnnnXXXnnn
        int lesCentMille = Integer.parseInt(snumber.substring(6, 9));
        // nnnnnnnnnXXX
        int lesMille = Integer.parseInt(snumber.substring(9, 12));

        String tradMilliards;
        switch (lesMilliards) {
            case 0:
                tradMilliards = "";
                break;
            case 1:
                tradMilliards = convertLessThanOneThousand(lesMilliards)
                        + " milliard ";
                break;
            default:
                tradMilliards = convertLessThanOneThousand(lesMilliards)
                        + " milliards ";
        }
        String resultat = tradMilliards;

        String tradMillions;
        switch (lesMillions) {
            case 0:
                tradMillions = "";
                break;
            case 1:
                tradMillions = convertLessThanOneThousand(lesMillions)
                        + " million ";
                break;
            default:
                tradMillions = convertLessThanOneThousand(lesMillions)
                        + " millions ";
        }
        resultat = resultat + tradMillions;

        String tradCentMille;
        switch (lesCentMille) {
            case 0:
                tradCentMille = "";
                break;
            case 1:
                tradCentMille = "mille ";
                break;
            default:
                tradCentMille = convertLessThanOneThousand(lesCentMille)
                        + " mille ";
        }
        resultat = resultat + tradCentMille;

        String tradMille;
        tradMille = convertLessThanOneThousand(lesMille);
        resultat = resultat + tradMille;

        return resultat;
    }

}



Compatibilité : 1.0

A voir également

Ajouter un commentaire

Commentaires

KX
Messages postés
16040
Date d'inscription
samedi 31 mai 2008
Statut
Modérateur
Dernière intervention
19 octobre 2019
88 -
Beau travail, dommage que ce ne soit pas le tien mais un copier-coller d'un code qui fait le tour du web depuis 2009...

https://www.google.fr/search...

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.