Merci Yannick, même si on ne s'en sert pas tout de suite, on stocke au cas où... Serge
-------------------------------------------------- From: "Yannick Youalé" <[email protected]> Sent: Tuesday, May 16, 2017 12:11 PM To: <[email protected]> Subject: [progliste] javascript convertir un nombre en toutes lettres 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:[email protected]?subject=unsubscribe Pour voir les archives de la liste : http://www.mail-archive.com/[email protected]/ 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�. Progliste : Pour se d�sinscrire de la liste : mailto:[email protected]?subject=unsubscribe Pour voir les archives de la liste : http://www.mail-archive.com/[email protected]/ 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�.
