Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > Contribuez
Contribuez Proposez vos articles, cours, tutoriels, questions/réponses pour les FAQ, sources et autres ressources pour la rubrique Web ainsi que ses sous-rubriques.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 01/09/2007, 10h18   #1
Expert Confirmé
 
Avatar de javatwister
 
Homme
danseur
Inscription : août 2003
Messages : 2 667
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Calvados (Basse Normandie)

Informations professionnelles :
Activité : danseur

Informations forums :
Inscription : août 2003
Messages : 2 667
Points : 3 035
Points : 3 035
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 :
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>
javatwister est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 06/09/2007, 18h03   #2
Expert Confirmé
 
Avatar de FremyCompany
 
Étudiant
Inscription : février 2006
Messages : 2 532
Détails du profil
Informations personnelles :
Âge : 20

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : février 2006
Messages : 2 532
Points : 2 903
Points : 2 903
Envoyer un message via MSN à FremyCompany
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, ...
__________________
Fremy
Pour vos développements Web et une navigation agréable, le tout gratuit :
1) IE 8 + IE7Pro (Si vous ne connaissez pas IE7Pro, essayez !)
2) FF 3 + Web Developper Toolbar + AdBlockPlus + FireBug + GreaseMonkey
FremyCompany est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 07/09/2007, 13h23   #3
Expert Confirmé
 
Avatar de javatwister
 
Homme
danseur
Inscription : août 2003
Messages : 2 667
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Calvados (Basse Normandie)

Informations professionnelles :
Activité : danseur

Informations forums :
Inscription : août 2003
Messages : 2 667
Points : 3 035
Points : 3 035
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 ^_^
javatwister est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 00h04.


 
 
 
 
Partenaires

Hébergement Web