Salut Abdel,

Merci pour cette astuce qui a les mérites d'être élégante et de fonctionner avec les versions antérieures de javascript.


Ca a tout de suite été sauvegardé.


Yannick Daniel Youalé
La programmation est une religion. Aimez-la, ou quittez-la.
www.visuweb.net


Le 17/05/2017 à 15:36, Abdel a écrit :
Coucou Yannick,

À mon tour, je te remercie pour ce joli cadeau.

Je crée un nouveau sujet pour ce fil.

En fait, en Javascript, il sera bientôt ou plutôt il est déjà possible de pouvoir créer des classes, en utilisant le mot clé class, comme avec les autres langages orientés objet.

Cette nouvelle syntaxe est apparue avec la sixième édition du standard ECMAScript sortie en 2015.

Elle est décrite ici, si tu veux en savoir plus :

https://developer.mozilla.org/fr/docs/Web/JavaScript/Reference/Classes

// Avec les anciennes versions de Javascript, on pouvait définir une classe comme suit, c'était le modèle prototypal,, (Prototypal Pattern) :

function Member (name){
   // Ajout d'une propriété à notre objet.
   this.name = name;
}

// Ajout d'une méthode à notre objet.
Member.prototype.message = function(){
    alert("Hello, mon nom est" + this.name);
};

// Instanciation d'un nouvel objet avec le mot clé new.
var member = new Member ("Yannick", 18);

// Invocation de la méthode message.
member.message(); // affiche l'alerte "Hello, mon nom est Yannick".

Pour une meilleure lisibilité du code, le standard ECMAScript a décidé d'ajouter le mot clé class, ainsi que les mots clés utilisés habituellement avec les constructeur/héritage.

C'est juste un sucre syntactique, (syntactic sugar), car ces notions étaient déja connues avec le modèle prototypal, mais sous une syntaxe un peu indigeste pour les développeurs.

Voili voilou, merci à toi.

Bien amicalement,
Abdel.


Le 16/05/2017 à 12:11, Yannick Youalé a écrit :
> Salut les mecs,
>
>
> Je vous propose un code javascript de convertion de nombre en toutes lettres.
>
>
> Certes pour les DV l'intérêt est limité car nos logiciels de synthèse vocale nous lisent déjà correctement les nombres, mais pour ceux qui ont des pages de facturations ou simplement des champs d'affichage de montant en argent sur leurs sites, ils pourraient y trouver une utilité.
>
>
> Il y a de cela quelques siècles, j'avais proposé une version de ce code en VBA, que j'ai bien évidemment amélioré depuis.
>
>
> J'aurais bien aimé encapsuler ces fonctions dans une classes, mais le javascript ne le permet pas en natif. Donc, il s'agit d'un groupe de fonctions dont celle que vous utiliserez le plus sera ConvertNumber.
>
>
> Attention voici le code:
>
>
> Début du code javascript
>
>
> // code permettant de convertir un nombre en toutes lettres
> // prend en compte les décimales
> // limité à 999 999 999 999 999 soit aux trillions
> // la seule fonction à utiliser est ConvertNumber(sNumber
>
> function ConvertUnit(sNumber){
> // convertit un chiffre isolé
> var tbl;
> // On Error Resume } // Next
> tbl = new Array("", "un", "deux", "trois", "quatre", "cinq", "six", "sept", "huit", "neuf");
> return tbl[parseInt(sNumber)];
> } // end function
>
> function ConvertTen(sNumber){
> // convertit un nombre dans les dizaines
> var tbl;
> tbl = new Array("", "dix", "vingt", "trante", "quarante", "cinquante", "soixante", "soixante-dix", "quatre-vingt", "quatre-vingt-dix");
> return tbl[parseInt(sNumber)];
> } // end function
>
> function ConvertTenSpecial(sNumber){
> // les nombres spéciaux de la langue française
> // renvoi chaîne vide si aucune équivalance
> var s;
> var i1;
> var i2;
> s = "";
> i1 = sNumber.substring(0, 1);
> i2 = sNumber.substring(1, 2);
> switch (i1) {
> case "1":
> case "7":
> case "9":
> if(i2 == "1"){
> if (i1 != "1"){ s = ConvertTen(i1 - 1); }
> s = s + " onze";
> } else if(i2 == "2"){
> if (i1 != "1"){ s = ConvertTen("" + (parseInt(i1) - 1) + ""); }
> s = s + " douze";
> } else if(i2 == "3"){
> if (i1 != "1"){ s = ConvertTen("" + (parseInt(i1) - 1) + ""); }
> s = s + " treize";
> } else if(i2 == "4"){
> if (i1 != "1"){ s = ConvertTen("" + (parseInt(i1) - 1) + ""); }
> s = s + " quatorze";
> } else if(i2 == "5"){
> if (i1 != "1"){ s = ConvertTen("" + (parseInt(i1) - 1) + ""); }
> s = s + " quinze";
> } else if(i2 == "6"){
> if (i1 != "1"){ s = ConvertTen("" + (parseInt(i1) - 1) + ""); }
> s = s + " seize";
> } // end if
> } // end select
> // renvoi
> return s.trim();
> } // end function
>
> function ConvertHundred(sNumber){
> // convertit un nombre limité à la centaine
> var i;
> var s = "";
> var sHundred;
> var sTen;
> var sTenSpecial;
> var sUnit;
> // ajout de 0 si nécessaire
> i = 3 - sNumber.length;
> if (i > 0){ sNumber = "0".repeat(i) + sNumber; }
> // vérification
> if(sNumber == "000"){
> return "";
> } // fin si
> // centaine
> sHundred = sNumber.substring(0, 1);
> // dizaine
> sTen = sNumber.substring(1, 2);
> // unité
> sUnit = sNumber.substring(2, 3);
> // centaine
> if (sHundred != "0"){
> if (sHundred == "1"){
> s = "cent";
> } else {
> s = ConvertUnit(sHundred) + " cents";
> } // end if
> } // end if ' fin des centaines
> // dizaine
> // vérification si dizaine spéciale
> sTenSpecial = ConvertTenSpecial(sNumber.substring(1, 3));
> if (sTenSpecial != ""){
> s = s + " " + sTenSpecial;
> } else {
> // si dizaine normale
> if (sTen != "0"){
> s = s + " " + ConvertTen(sTen);
> } // end if ' fin des dizaines
> // unité
> if (sTen != "0" && sUnit == "1"){ s = s + " et"; }
> if (sUnit == "1"){
> s = s + " " + ConvertUnit(sUnit);
> } else if(sUnit != "0"){
> s = s + "-" + ConvertUnit(sUnit);
> } // end if
> } // end if ' fin si dixaine spéciale ou pas
> // renvoi
> s = s.trim();
> return s;
> } // end function
>
> function ConvertIntegerNumber(sNumber){
> // convertit un nombre entier en toutes lettres.
> var i;
> var s;
> var s2;
> var sHundred;
> // vérification si numérique
> // sNumber = sNumber.trim();
> sNumber = sNumber.replace(" ", "");
> if (isFinite(sNumber) == false){
> return "";
> } // end if
> // on complète avec des 0
> // jusqu'à  la longueur maximale
> // qui est de 999 trillions.
> // ce qui fait au maximum 15 caractères
> i = 15 - sNumber.length;
> // exception
> if (i < 0){
> return "";
> } // end if
> sNumber = "0".repeat(i) + sNumber;
> // s'il n'y a que des zéro
> if(sNumber.match("^[0]+$")){
> return "zéro";
> } // fin si
> // parcours des cinq branches de trois caractères
> // tout en complétant le texte résultat
> s = "";
> for(i=1; i<=5; i++){
> sHundred = sNumber.substring((i - 1) * 3, ((i - 1) * 3) + 3);
> s2 = ConvertHundred(sHundred);
> // selon la branche
> switch (i) {
> case 1: // trillion
> if (s2 != ""){
> s = s + " " + s2 + " trillion";
> // si pluriel
> if (s2 != "un"){ s = s + "s"; }
> } // end if
> break;
> case 2: // milliard
> if (s2 != ""){
> s = s + " " + s2 + " milliard";
> // si pluriel
> if (s2 != "un"){ s = s + "s"; }
> } // end if
> break;
> case 3: // million
> if (s2 != ""){
> s = s + " " + s2 + " million";
> // si pluriel
> if (s2 != "un"){ s = s + "s"; }
> } // end if
> break;
> case 4: // millier
> if (s2 != ""){
> if (s2 == "un"){
> s = s + " mille";
> } else {
> s = s + " " + s2 + " mille";
> } // end if
> // si pluriel
> if (s2 != "un"){ s = s + "s"; }
> } // end if
> break;
> case 5: // centaine
> if (s2 != ""){
> s = s + " " + s2;
> } // end if
> break;
> } // end select
> } // Next // branche de trois suivante
> // renvoi
> s = s.trim();
> if (s.substring(0, 1) == "-"){ s = s.substring(1); }
> return s;
> } // end function
>
> function ConvertNumber(sNumber){
> // convertit un nombre même avec virgule
> var s = "";
> var sIntegerPart = "";
> var sDecimalPart = "";
> var tbl;
> // vérification et formattage
> if (sNumber == ""){
> return "";
> } // end if
> // retrait des espaces
> sNumber = sNumber.replace(" ", "");
> //  transformation de virgule en point
> sNumber = sNumber.replace(",", ".");
> if(isFinite(sNumber) == false){
> return "";
> } // end if
> // si présence de décimale
> if (sNumber.indexOf(".") >= 0){
> tbl = sNumber.split(".");
> sIntegerPart = tbl[0];
> sDecimalPart = tbl[1];
> } else {
> sIntegerPart = sNumber;
> } // end if
> // convertion de la partie entière
> s = ConvertIntegerNumber(sIntegerPart);
> // si partie décimale
> if (sDecimalPart != ""){
> if (parseInt(sDecimalPart) >= 0){
> s = s + " virgule ";
> // s'il y a des zéro après la virgule, ils doivent être lus
> if(sDecimalPart.match("^[0]+")){
> // s'il n'y a que des zéro
> if(sDecimalPart.match("^[0]+$")){
> s = s + "zéro ";
> } else { // il n'y a pas que des zéro
> // on dit le nombre de zéro avant le reste des chiffres
> i = sDecimalPart.search("[^0]");
> s = s + "zéro ".repeat(i);
> } // fin si
> } // fin si des zéro après la virgule
> s = s + ConvertIntegerNumber(sDecimalPart);
> } // end if
> } // end if
> // renvoi
> return s.trim();
> } // end function
>
>
> Fin du code javascript
>
>
> Puisse cela être utile à quelqu'un !
>
>
> Yannick Daniel Youalé
> La programmation est une religion. Aimez-la, ou quittez-la.
> www.visuweb.net

Progliste :
Pour se d�sinscrire de la liste : mailto:progliste-requ...@ml.free.fr?subject=unsubscribe

Pour voir les archives de la liste :
http://www.mail-archive.com/progliste@ml.free.fr/

Je vous rappelle que les pi�ces jointe sont activ�s leur taille est limit� � 2 MO
Pour acc�der aux fichiers de la liste
http://outils.archive-host.com/partage.php?id=2Qar9Hy6ftzr
Ou en utilisant la nouvelle page de partage :
http://outils-n.archive-host.com/partage-fm0m7b947vglikp9Efpso94gt
Pour y ajouter des fichiers demandez-moi le ou sur la liste ou en priv�, je vous r�pondrez en priv�.



---
Cet email a fait l'objet d'une analyse antivirus par AVG.
http://www.avg.com


Progliste :
Pour se d�sinscrire de la liste : 
mailto:progliste-requ...@ml.free.fr?subject=unsubscribe

Pour voir les archives de la liste :
http://www.mail-archive.com/progliste@ml.free.fr/       

Je vous rappelle que les pièces jointe sont activés leur taille est limité à 2 MO
Pour acc�der aux fichiers de la liste
http://outils.archive-host.com/partage.php?id=2Qar9Hy6ftzr
Ou en utilisant la nouvelle page de partage :
http://outils-n.archive-host.com/partage-fm0m7b947vglikp9Efpso94gt
Pour y ajouter des fichiers demandez-moi le ou sur la liste ou en priv�, je 
vous r�pondrez en priv�.
        
        

Répondre à