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�.
        
        

Répondre à