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

Contribuez Discussion :

[SRC] afficher des nombres en toutes lettres


Sujet :

Contribuez

  1. #1
    Expert confirmé
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    Août 2003
    Messages
    3 681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : danseur

    Informations forums :
    Inscription : Août 2003
    Messages : 3 681
    Points : 5 221
    Points
    5 221
    Par défaut [SRC] afficher des nombres en toutes lettres
    Script ici dédié aux valeurs monétaires (une seule ligne à commenter pour ne pas s'en tenir aux centièmes);


    démo: http://javatwist.imingo.net/nbrtochar.htm
    Code html : 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
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    <script type="text/javascript">
     
    var res, plus, diz, s, un, mil, mil2, ent, deci, centi, pl, pl2, conj;
     
    var t=["","un","deux","trois","quatre","cinq","six","sept","huit","neuf"];
    var t2=["dix","onze","douze","treize","quatorze","quinze","seize","dix-sept","dix-huit","dix-neuf"];
    var t3=["","","vingt","trente","quarante","cinquante","soixante","soixante","quatre-vingt","quatre-vingt"];
     
     
     
    window.onload=calcule
     
    function calcule(){
        document.getElementById("t").onchange=function(){
            document.getElementById("lettres").firstChild.data=trans(this.value)
        }
    }
     
    ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    // traitement des deux parties du nombre;
    function decint(n){
     
        switch(n.length){
            case 1 : return dix(n);
            case 2 : return dix(n);
            case 3 : return cent(n.charAt(0)) + " " + decint(n.substring(1));
            default: mil=n.substring(0,n.length-3);
                if(mil.length<4){
                    un= (mil==1) ? "" : decint(mil);
                    return un + mille(mil)+ " " + decint(n.substring(mil.length));
                }
                else{    
                    mil2=mil.substring(0,mil.length-3);
                    return decint(mil2) + million(mil2) + " " + decint(n.substring(mil2.length));
                }
        }
    }
     
     
     
    ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    // traitement des nombres entre 0 et 99, pour chaque tranche de 3 chiffres;
    function dix(n){
        if(n<10){
            return t[parseInt(n)]
        }
        else if(n>9 && n<20){
            return t2[n.charAt(1)]
        }
        else {
            plus= n.charAt(1)==0 && n.charAt(0)!=7 && n.charAt(0)!=9 ? "" : (n.charAt(1)==1 && n.charAt(0)<8) ? " et " : "-";
            diz= n.charAt(0)==7 || n.charAt(0)==9 ? t2[n.charAt(1)] : t[n.charAt(1)];
            s= n==80 ? "s" : "";
     
            return t3[n.charAt(0)] + s + plus + diz;
        }
    }
     
     
    ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    // traitement des mots "cent", "mille" et "million"
    function cent(n){
    return n>1 ? t[n]+ " cent" : (n==1) ? " cent" : "";
    }
     
    function mille(n){
    return n>=1 ? " mille" : "";
    }
     
    function million(n){
    return n>=1 ? " millions" : " million";
    }
     
     
    ///////////////////////////////////////////////////////////////////////////////////////////////////////////////////
    // conversion du nombre
    function trans(n){
     
        // vérification de la valeur saisie
        if(!/^\d+[.,]?\d*$/.test(n)){
            return "L'expression entrée n'est pas un nombre."
        }
     
        // séparation entier + décimales
        n=n.replace(/(^0+)|(\.0+$)/g,"");
        n=n.replace(/([.,]\d{2})\d+/,"$1");
        n1=n.replace(/[,.]\d*/,"");
        n2= n1!=n ? n.replace(/\d*[,.]/,"") : false;
        
        // variables de mise en forme
        ent= !n1 ? "" : decint(n1);
        deci= !n2 ? "" : decint(n2);
        if(!n1 && !n2){
            return  "Zéro Euros. (Mais, de préférence, entrez une valeur non nulle!)"
        }
        conj= !n2 || !n1 ? "" : "  et ";
        euro= !n1 ? "" : !/[23456789]00$/.test(n1) ? " Euro" : "s Euro";
        centi= !n2 ? "" : " centime";
        pl=  n1>1 ? "s" : "";
        pl2= n2>1 ? "s" : "";
     
        // expression complète en toutes lettres
        return (ent + euro + pl + conj + deci + centi + pl2).replace(/\s+/g," ").replace("cent s E","cents E");
     
    }
     
    </script>
     
     
    <div style="text-align:center">
       <p id="lettres">Entrez une valeur à convertir en lettres, puis sortez du cadre.
       </p>
       <p>
          <input type="text" id="t" />
       </p>
    </div>

  2. #2
    Membre expert
    Avatar de FremyCompany
    Profil pro
    Étudiant
    Inscrit en
    Février 2006
    Messages
    2 532
    Détails du profil
    Informations personnelles :
    Âge : 33
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Février 2006
    Messages : 2 532
    Points : 3 239
    Points
    3 239
    Par défaut
    Très bon script, comme à ton habitude !

    Juste peut-être quelques pistes :
    * Si le nombre est 0 ou 1, ne pas mettre en "s" à Euro.
    * Si le nombre de centaine n'est pas 0 ou 1, mettre un "s" à cent.
    * Si un nombre ne comporte que des millions ou des milliards, mettre un "d'" avant Euros (ex: Deux millions d'Euros)
    * Si le nombre est négatif, prendre son opposé et ajouter "moins" au début.
    * Pour rendre le tout jolis, mettre en majuscule la première lettre

    Mais en tout cas bravo pour le script !
    Je te propose même de le poster sur iescripts.org, ca aidera plein de gens, et ca permetra aussi aux gens courageux de le traduire en C, en VB, en PHP, ...

  3. #3
    Expert confirmé
    Avatar de javatwister
    Homme Profil pro
    danseur
    Inscrit en
    Août 2003
    Messages
    3 681
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Calvados (Basse Normandie)

    Informations professionnelles :
    Activité : danseur

    Informations forums :
    Inscription : Août 2003
    Messages : 3 681
    Points : 5 221
    Points
    5 221
    Par défaut
    merci!

    pour le "singulier/ pluriel", il me semble que ça marche pas mal, sauf en effet pour "zéro" (en fait, je l'ai ajouté à l'arrache, à l'origine je mettais un message d'erreur);
    pour "cent", la règle est de mettre la marque du pluriel s'il n'est suivi d'aucun autre nombre (deux cents ==> deux cent un);

    je n'ai pas pensé aux valeurs négatives: j'avais fait ça pour m'amuser à simuler un virement
    la majuscule est présente en début d'expression via la petite css, sur la page de démo;

    sur l'utilité, je suis assez sceptique: encore une fois, c'est surtout pour montrer ce qu'on "peut" faire, mais je n'ai pas l'intention d'en faire une machine à imprimer les chèques ^_^

Discussions similaires

  1. Réponses: 9
    Dernier message: 19/03/2015, 22h54
  2. Réponses: 9
    Dernier message: 07/11/2006, 14h12
  3. [sql]convertion d'un nombre en toute lettre
    Par imedg dans le forum Oracle
    Réponses: 102
    Dernier message: 31/03/2006, 11h05
  4. [SGBD] MySQL:Probleme lorsque je evux afficher des nombres
    Par pierrot10 dans le forum SQL Procédural
    Réponses: 2
    Dernier message: 16/10/2005, 00h59

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