Java: convertir la somme de facture en lettre

Résolu
Bonjour,
Je suis entrain de realiser un logiciel de gestion de stock et de facturation.
je suis arrivée à la stade de génération des factures.
j'ai besoin d'un code java pour converir la somme total de ma facture en lettres .
exemple 1900,500euro sera traduit en neuf cents euro et cinq cents centes.

Merci pour l'aide.
Configuration: Windows 2000
Internet Explorer 6.0

5 réponses

  1. bien j'ai trouvé la solution sur un autre forum, (hereusement). La version est satndard j'ai fait quelques changement mais l'essentiel est présent. dans tous les cas merci à tous ceux qui ont pensé m'aider je posterai la solution dans ma prochaine connection. je suis en voyage pour le moment.
    Merci JAVA
    3
    1. trous personne besoin du solution peut m'envoyer uin mail à adoula.aguen at laposte.net
      1
      1. voila la solution:
        on peut faire appel au nombre.java comme suit
        String text=new Nombre().begin(""+totalx);
        avec totalx est un float;
        le fichier NOMBRE.java:

        package .......;

        /**
        * <p>Title: ........</p>
        * <p>Description: </p>
        * <p>Copyright: Copyright (c) 2008</p>
        * <p>Company: Adel Gnaoui</p>
        * @author Adel Gnaoui
        * @version 1.0
        */

        /*public class Nombre {
        public Nombre() {
        }
        public static void main(String[] args) {
        Nombre nombre1 = new Nombre();
        }

        }*/
        public class Nombre
        {
        /**
        * Représentaion en lettre de 0
        */

        public static final String ZERO="zéro";
        /**
        * Représentaion en lettre de 1
        */
        public static final String UN="un";
        /**
        * Représentaion en lettre de 2
        */
        public static final String DEUX="deux";
        /**
        * Représentaion en lettre de 3
        */
        public static final String TROIS="trois";
        /**
        * Représentaion en lettre de 4
        */
        public static final String QUATRE="quatre";
        /**
        * Représentaion en lettre de 5
        */
        public static final String CINQ="cinq";
        /**
        * Représentaion en lettre de 6
        */
        public static final String SIX="six";
        /**
        * Représentaion en lettre de 7
        */
        public static final String SEPT="sept";
        /**
        * Représentaion en lettre de 8
        */
        public static final String HUIT="huit";
        /**
        * Représentaion en lettre de 9
        */
        public static final String NEUF="neuf";

        /**
        * Représentaion en lettre de 10
        */
        public static final String DIX="dix";
        /**
        * Représentaion en lettre de 11
        */
        public static final String ONZE="onze";
        /**
        * Représentaion en lettre de 12
        */
        public static final String DOUZE="douze";
        /**
        * Représentaion en lettre de 13
        */
        public static final String TREIZE="treize";
        /**
        * Représentaion en lettre de 14
        */
        public static final String QUATORZE="quatorze";
        /**
        * Représentaion en lettre de 15
        */
        public static final String QUINZE="quinze";
        /**
        * Représentaion en lettre de 16
        */
        public static final String SEIZE="seize";

        /**
        * Représentaion en lettre de 20
        */
        public static final String VINGT="vingt";
        /**
        * Représentaion en lettre de 30
        */
        public static final String TRENTE="trente";
        /**
        * Représentaion en lettre de 40
        */
        public static final String QUARANTE="quarante";
        /**
        * Représentaion en lettre de 50
        */
        public static final String CINQUANTE="cinquante";
        /**
        * Représentaion en lettre de 60
        */
        public static final String SOIXANTE="soixante";

        /**
        * Représentaion en lettre de 100
        */
        public static final String CENT="cent";
        public static final String CENTS="cents";
        /**
        * Représentaion en lettre de 1000
        */
        public static final String MILLE="mille";
        /**
        * Représentaion en lettre de 1000000
        */
        public static final String MILLION="million";
        /**
        * Représentaion en lettre de 1000000000
        */
        public static final String MILLIARD="milliard";

        /**
        * Représentaion en lettre de -
        */
        public static final String MOINS="moins";

        //Nom des différents types de paquet de nombre
        private static final String[] tab={"",MILLE,MILLION,MILLIARD,MILLE+" "+MILLIARD,
        MILLION+" de "+MILLIARD,MILLIARD+" de "+MILLIARD};

        /**
        * Renvoie la représentation en lettre d'un chiffre, c'est à dire d'un nombre ente 0 et 9
        */
        public static String getChiffre(int l)
        {
        if((l<0)||(l>9))
        throw new IllegalArgumentException("Un chiffre est entre 0 et 9, donc "+l+" est interdit");
        switch(l)
        {
        case 0 :
        return ZERO;
        case 1 :
        return UN;
        case 2 :
        return DEUX;
        case 3 :
        return TROIS;
        case 4 :
        return QUATRE;
        case 5 :
        return CINQ;
        case 6 :
        return SIX;
        case 7 :
        return SEPT;
        case 8 :
        return HUIT;
        case 9 :
        return NEUF;
        }
        return null;
        }

        //Retourne la représentation en lettre d'un paquet. Un paquet est formé de tois chiffres, comme 123, 012, 001, 100, 101,...
        private static String paquet(int p)
        {
        //On initialise la réponse
        String reponse="";
        //Si on a un chiffre des centaines
        // if(p>100)
        if(p>=100)
        {

        //Si la valeur est >199 alors, on va mettre devant le chiffre des centaine
        if(p/100>1)
        reponse=getChiffre(p/100)+" ";
        //C'est une centaine, donc on ajoute ensuite "cent"
        if (p/100>1)
        //tous les cent s'ecrivent sans s
        //reponse += CENTS+" ";
        reponse += CENT+" ";
        else
        reponse += CENT+" ";
        //On récupére ce qui n'est pas la centaine
        p=p%100;
        }
        //c chiffre des dizaines
        //u chaiffre des unitées
        int c=p/10;
        int u=p%10;
        switch(c)
        {
        //Si la dizaine est nule, alors le nombre est un chiffre
        case 0 :
        if(u!=0)
        reponse += getChiffre(u);
        break;
        case 1 :
        switch(u)
        {
        case 0 :
        reponse += DIX;
        break;
        case 1 :
        reponse += ONZE;
        break;
        case 2 :
        reponse += DOUZE;
        break;
        case 3 :
        reponse += TREIZE;
        break;
        case 4 :
        reponse += QUATORZE;
        break;
        case 5 :
        reponse += QUINZE;
        break;
        case 6 :
        reponse += SEIZE;
        break;
        default :
        reponse += DIX+" "+getChiffre(u);
        }
        break;
        case 2 :
        reponse += VINGT;
        if(u==1)
        reponse += " et";
        if(u>0)
        reponse += " "+getChiffre(u);
        break;
        case 3 :
        reponse += TRENTE;
        if(u==1)
        reponse += " et";
        if(u>0)
        reponse += " "+getChiffre(u);
        break;
        case 4 :
        reponse += QUARANTE;
        if(u==1)
        reponse += " et";
        if(u>0)
        reponse += " "+getChiffre(u);
        break;
        case 5 :
        reponse += CINQUANTE;
        if(u==1)
        reponse += " et";
        if(u>0)
        reponse += " "+getChiffre(u);
        break;
        case 6 :
        reponse += SOIXANTE;
        if(u==1)
        reponse += " et";
        if(u>0)
        reponse += " "+getChiffre(u);
        break;
        case 7 :
        reponse += SOIXANTE+" ";
        if(u==1)
        reponse += " et";
        switch(u)
        {
        case 0 :
        reponse += DIX;
        break;
        case 1 :
        reponse += ONZE;
        break;
        case 2 :
        reponse += DOUZE;
        break;
        case 3 :
        reponse += TREIZE;
        break;
        case 4 :
        reponse += QUATORZE;
        break;
        case 5 :
        reponse += QUINZE;
        break;
        case 6 :
        reponse += SEIZE;
        break;
        default :
        reponse += DIX+" "+getChiffre(u);
        }
        break;
        case 8 :
        //reponse += QUATRE+" "+VINGT;
        reponse += QUATRE+"-"+VINGT;
        if(u>0)
        reponse += " "+getChiffre(u);
        break;
        case 9 :
        reponse += QUATRE+"-"+VINGT+" ";
        switch(u)
        {
        case 0 :
        reponse += DIX;
        break;
        case 1 :
        reponse += ONZE;
        break;
        case 2 :
        reponse += DOUZE;
        break;
        case 3 :
        reponse += TREIZE;
        break;
        case 4 :
        reponse += QUATORZE;
        break;
        case 5 :
        reponse += QUINZE;
        break;
        case 6 :
        reponse += SEIZE;
        break;
        default :
        reponse += DIX+"-"+getChiffre(u);
        //reponse += DIX+" "+getChiffre(u);
        }
        break;
        }
        //On renvoie la réponse, à laquelle on retire les éventuels espaces surperflus
        return reponse.trim();
        }

        /**
        * Renvoie le nombre en lettre, <BR>
        * ex: 1234567890 devient : un milliard deux cent trente quatre million cinq cent soixante sept mille huit cent quatre vingt dix
        */
        public static String getLettre(long l)
        {
        //Cas zéro
        if(l==0L)
        return ZERO;
        String signe="";
        //Cas négatif
        if(l<0L)
        {
        //On prned la valeur absolue
        l=-l;
        //On ajoutera moins devant
        signe=MOINS+" ";
        }
        //Initilisation de la réponse
        String reponse="";
        //Rang du paquet actuel, on va parcourir le nombre de gauche à droite, le premier paquet de 123456 sera donc : 456
        int rang=0;
        while(l>0L)
        {
        //on ajoute le paquet devant la réponse
        if (((int)(l%1000L))>0){
        reponse = paquet( (int) (l % 1000L)) + " " + tab[rang] + " " + reponse;
        }
        else{
        reponse = paquet( (int) (l % 1000L)) + " " + reponse;
        }
        /* /* private static final String[] tab={"",MILLE,MILLION,MILLIARD,MILLE+" "+MILLIARD,
        MILLION+" de "+MILLIARD,MILLIARD+" de "+MILLIARD};*/
        System.out.println(""+reponse);
        //on passe au paquet suivant
        l=l/1000L;
        rang++;
        }
        //on ajoute le signe éventuel
        reponse=signe+reponse;
        //On renvoie la réponse, à laquelle on retire les éventuels espaces surperflus
        return reponse.trim();
        }
        public static String getLettre(int l)
        {
        //Cas zéro
        if(l==0)
        return ZERO;
        String signe="";
        //Cas négatif
        if(l<0)
        {
        //On prned la valeur absolue
        l=-l;
        //On ajoutera moins devant
        signe=MOINS+" ";
        }
        //Initilisation de la réponse
        String reponse="";
        //Rang du paquet actuel, on va parcourir le nombre de gauche à droite, le premier paquet de 123456 sera donc : 456
        int rang=0;
        while(l>0L)
        {
        //on ajoute le paquet devant la réponse
        reponse=paquet((int)(l%1000))+" "+tab[rang]+" "+reponse;
        //on passe au paquet suivant
        l=l/1000;
        rang++;
        }
        //on ajoute le signe éventuel
        reponse=signe+reponse;
        //On renvoie la réponse, à laquelle on retire les éventuels espaces surperflus
        return reponse.trim();
        }

        public static void main(String args[])
        {
        Nombre nombre1 = new Nombre();
        }
        public static String begin(String nbre){
        String txt="";
        String valx="";
        String valy="";
        int x=0;
        //String nbr="12.693";
        String nbr=nbre;
        x=nbr.indexOf(".");
        valx=nbr.substring(0,x);
        valy=nbr.substring(x+1,nbr.length());
        System.out.println("==="+valx);
        System.out.println("==="+valy);
        String xx=""+valy;
        if( xx.length()==1){
        valy=valy+"00";
        }
        if( xx.length()==2){
        valy=valy+"0";
        }
        System.out.println("==="+valx);
        System.out.println("==="+valy);

        long ax=Long.parseLong(valx);
        int ay=Integer.parseInt(valy);

        // pour mille : il ecrit un mille ???enlever le un : 100000 : il ecrit mille : et oublie le cent; 1000000 : il ecrit un million mille dinars ??? un million dinars ç tout ; de meme pour 10 million

        if(x!=-1)
        {

        System.out.println(""+getLettre(ax)+" Dinars et "+getLettre(ay)+" Millimes");
        txt="Arreté la présente facture à la somme de "+getLettre(ax)+" Dinars et "+getLettre(ay)+" Millimes";
        }

        else
        {

        System.out.println(""+getLettre(ax)+" Dinars ");
        txt="Arreté la présente facture à la somme de "+getLettre(ax)+" Dinars ";
        }
        return txt;
        }

        }
        1
        1. Bonjour :

          double num = 2718.28;
          NumberFormat formatter = new RuleBasedNumberFormat(RuleBasedNumberFormat.SPELLOUT);
          // NumberFormat formatter = new RuleBasedNumberFormat(Locale.FRANCE, RuleBasedNumberFormat.SPELLOUT);
          String result = formatter.format(num);
          System.out.println(result);

          // résultat avec Locale.ENGLISH : two thousand seven hundred and eighteen point two eight
          // résultat avec Locale.GERMAN : zwei tausend sieben hundert achtzehn Komma zwei acht
          // résultat avec Locale.FRANCE : deux-mille-sept-cent-dix-huit virgule deux huit
          0
          1. NumberFormat formatter = new RuleBasedNumberFormat(RuleBasedNumberFormat.SPELLOUT);

            String result = formatter.format(num);
            System.out.println(result);
            0