IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

API standards et tierces Java Discussion :

[LIBRAIRIE] Convertir nombre en lettre


Sujet :

API standards et tierces Java

  1. #1
    Membre expérimenté
    Avatar de narmataru
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 548
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 548
    Points : 1 680
    Points
    1 680
    Par défaut [LIBRAIRIE] Convertir nombre en lettre
    Bonjour,
    Je suis à la recherche d'une librairie qui permet de convertir un nombre en toute lettre. Par exemple :
    400 => quatre cents
    471 => quatre cent soixante et onze
    etc...

    Merci

  2. #2
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Salut,


    Il y a le RuleBasedNumberFormat de la librairie ICU : http://www.icu-project.org/download/3.8.html#ICU4J

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    	RuleBasedNumberFormat rbnf = new RuleBasedNumberFormat(Locale.FRANCE, RuleBasedNumberFormat.SPELLOUT);
     
    	System.out.println( rbnf.format(400) );
    	System.out.println( rbnf.format(471) );
    Même si apparemment il a quelques problèmes avec les spécificités du français et les 's' des centaines :
    quatre cents
    quatre cents soixante et onze
    a++

  3. #3
    Membre éprouvé Avatar de fraco
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    750
    Détails du profil
    Informations personnelles :
    Localisation : Suisse

    Informations forums :
    Inscription : Juin 2006
    Messages : 750
    Points : 934
    Points
    934
    Par défaut
    Sauf erreur, on ne met pas de s à cent s'il est suivi d'un autre mot :
    quatre cent soixante et onze est correct.

    Vieux souvenir d'école... mais ça a peut-être changé depuis ?

  4. #4
    Expert éminent sénior
    Avatar de adiGuba
    Homme Profil pro
    Développeur Java/Web
    Inscrit en
    Avril 2002
    Messages
    13 938
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java/Web
    Secteur : Transports

    Informations forums :
    Inscription : Avril 2002
    Messages : 13 938
    Points : 23 190
    Points
    23 190
    Billets dans le blog
    1
    Par défaut
    Citation Envoyé par fraco Voir le message
    Sauf erreur, on ne met pas de s à cent s'il est suivi d'un autre mot :
    quatre cent soixante dix est correct.

    Vieux souvenir d'école... mais ça a peut-être changé depuis ?
    Oui oui c'est bien cela ! Mais justement la librairie met le 's' dans tous les cas et c'est pour cela que je disais qu'il avait des problèmes

    Il y a peut-être moyen de corriger cela puisqu'on dirait qu'on peut modifier les règles mais j'avoue ne pas savoir comment...


    a++

  5. #5
    Membre expérimenté
    Avatar de narmataru
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 548
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 548
    Points : 1 680
    Points
    1 680
    Par défaut
    Merci pour le lien, je vais regarder ça...

  6. #6
    Membre expérimenté
    Avatar de narmataru
    Profil pro
    Inscrit en
    Décembre 2002
    Messages
    1 548
    Détails du profil
    Informations personnelles :
    Âge : 44
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Décembre 2002
    Messages : 1 548
    Points : 1 680
    Points
    1 680
    Par défaut
    Salut,
    Il y a un bug dans la conversion en français. Elle laisse un's' à cent même s'il y a un chiffre derrière.
    Voici la correction :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
     
        /**
         * Spellout rules for French.  French adds some interesting quirks of its
         * own: 1) The word "et" is interposed between the tens and ones digits,
         * but only if the ones digit if 1: 20 is "vingt," and 2 is "vingt-deux,"
         * but 21 is "vingt-et-un."  2)  There are no words for 70, 80, or 90.
         * "quatre-vingts" ("four twenties") is used for 80, and values proceed
         * by score from 60 to 99 (e.g., 73 is "soixante-treize" ["sixty-thirteen"]).
         * Numbers from 1,100 to 1,199 are rendered as hundreds rather than
         * thousands: 1,100 is "onze cents" ("eleven hundred"), rather than
         * "mille cent" ("one thousand one hundred")
         */
        public static final String french =
            // the main rule set
            "%main:\n"
                   // negative-number and fraction rules
            + "    -x: moins >>;\n"
            + "    x.x: << virgule >>;\n"
                   // words for numbers from 0 to 10
            + "    z\u00e9ro; un; deux; trois; quatre; cinq; six; sept; huit; neuf;\n"
            + "    dix; onze; douze; treize; quatorze; quinze; seize;\n"
            + "        dix-sept; dix-huit; dix-neuf;\n"
                   // ords for the multiples of 10: %%alt-ones inserts "et"
                   // when needed
            + "    20: vingt[->%%alt-ones>];\n"
            + "    30: trente[->%%alt-ones>];\n"
            + "    40: quarante[->%%alt-ones>];\n"
            + "    50: cinquante[->%%alt-ones>];\n"
                   // rule for 60.  The /20 causes this rule's multiplier to be
                   // 20 rather than 10, allowinhg us to recurse for all values
                   // from 60 to 79...
            + "    60/20: soixante[->%%alt-ones>];\n"
                   // ...except for 71, which must be special-cased
            + "    71: soixante et onze;\n"
                   // at 72, we have to repeat the rule for 60 to get us to 79
            + "    72/20: soixante->%%alt-ones>;\n"
                   // at 80, we state a new rule with the phrase for 80.  Since
                   // it changes form when there's a ones digit, we need a second
                   // rule at 81.  This rule also includes "/20," allowing it to
                   // be used correctly for all values up to 99
            + "    80: quatre-vingts; 81/20: quatre-vingt->>;\n"
                   // "cent" becomes plural when preceded by a multiplier, and
                   // the multiplier is omitted from the singular form
            + "    100: cent[ >>];\n"
            + "    200: << cents;\n"
            + "    201: << cent[ >>];\n"
            + "    300: << cents;\n"
            + "    301: << cent[ >>];\n"
            + "    400: << cents;\n"
            + "    401: << cent[ >>];\n"
            + "    500: << cents;\n"
            + "    501: << cent[ >>];\n"
            + "    600: << cents;\n"
            + "    601: << cent[ >>];\n"
            + "    700: << cents;\n"
            + "    701: << cent[ >>];\n"
            + "    800: << cents;\n"
            + "    801: << cent[ >>];\n"
            + "    900: << cents;\n"
            + "    901: << cent[ >>];\n"
            + "    1000: mille[ >>];\n"
                   // values from 1,100 to 1,199 are rendered as "onze cents..."
                   // instead of "mille cent..."  The > after "1000" decreases
                   // the rule's exponent, causing its multiplier to be 100 instead
                   // of 1,000.  This prevents us from getting "onze cents cent
                   // vingt-deux" ("eleven hundred one hundred twenty-two").
            + "    1100>: onze cents[ >>];\n"
                   // at 1,200, we go back to formating in thousands, so we
                   // repeat the rule for 1,000
            + "    1200: mille >>;\n"
                   // at 2,000, the multiplier is added
            + "    2000: << mille[ >>];\n"
            + "    1,000,000: << million[ >>];\n"
            + "    2,000,000: << millions[ >>];\n"
            + "    1,000,000,000: << milliard[ >>];\n"
            + "    2,000,000,000: << milliards[ >>];\n"
            + "    1,000,000,000,000: << billion[ >>];\n"
            + "    2,000,000,000,000: << billions[ >>];\n"
            + "    1,000,000,000,000,000: =#,##0=;\n"
            // %%alt-ones is used to insert "et" when the ones digit is 1
            + "%%alt-ones:\n"
            + "    ; et-un; =%main=;";
     
    	private RuleBasedNumberFormat rbnf = new RuleBasedNumberFormat(french, Locale.FRANCE);
    Et merci encore pour le lien.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. ConvNumberLetter Word - convertir nombres en lettres
    Par Le_Masque_De_Zoro dans le forum VBA Word
    Réponses: 1
    Dernier message: 17/07/2014, 01h18
  2. Convertir un nombre en lettres ?
    Par narmataru dans le forum API standards et tierces
    Réponses: 2
    Dernier message: 12/05/2009, 18h18
  3. convertir nombre en lettres
    Par blackwater dans le forum C
    Réponses: 4
    Dernier message: 30/04/2008, 12h03
  4. Convertir nombre en lettre (indice de colonne)
    Par serar dans le forum Macros et VBA Excel
    Réponses: 8
    Dernier message: 08/04/2008, 10h16
  5. Convertir nombre en lettre dans excel 2007
    Par ghizou771 dans le forum Excel
    Réponses: 1
    Dernier message: 15/12/2007, 08h15

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo