A voir également:
- Convertir un chiffre en lettre
- Telecharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Clavier iphone chiffre et lettre - Guide
- Chiffre en lettre - Télécharger - Outils professionnels
- Télécharger macro convertir chiffre en lettre excel - Télécharger - Tableur
- Excel trier par ordre croissant chiffre - Guide
8 réponses
Je crais que ca ne soit pas vraiment possible de convertir un nombre en toute lettre automatiquement, la fonction replace ne permet pas de convertir automatiquement un nombre en string. Mais juste de remplacer une chaine par une autre dont on connait deja le contenu.
On connais déjà le contenu o_o
1 -> un
2 -> deux
...
ça risque d'être long et fastidieux mais en traitement de caractères et avec une bonne méthode il est tout à fait possible de réaliser tout ça. Certes la patience est de rigueur et le courage aussi mais des alternatives existes ;)
1 -> un
2 -> deux
...
ça risque d'être long et fastidieux mais en traitement de caractères et avec une bonne méthode il est tout à fait possible de réaliser tout ça. Certes la patience est de rigueur et le courage aussi mais des alternatives existes ;)
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
On peut traiter par dizaine, en comptant le nombre de caractère avant la virgule.
Exemple 1350000,50
On sait que le 7 ème caractère avant la virgule (soit le premier) est la barre des million donc on affiche un million, ou deux ou trois suivant le premier chiffre, mais c'est pas optimal du fait que on va pas traiter une infinité de chiffre... Après si c'est des nombres inférieur à 1000 c'est faisable. Mais là où ça deviendrait compliqué c'est par exemple 101901, comme il saurait que le 2ème 1 doit être interprété comme "un mille". Algorithmiquement parlant, c'est pas concevable :D
Exemple 1350000,50
On sait que le 7 ème caractère avant la virgule (soit le premier) est la barre des million donc on affiche un million, ou deux ou trois suivant le premier chiffre, mais c'est pas optimal du fait que on va pas traiter une infinité de chiffre... Après si c'est des nombres inférieur à 1000 c'est faisable. Mais là où ça deviendrait compliqué c'est par exemple 101901, comme il saurait que le 2ème 1 doit être interprété comme "un mille". Algorithmiquement parlant, c'est pas concevable :D
Bonjour merci pour vos réponses
j'ai trouvé une fonction qui marche bien mais tjrs j'ai un petit problème,
lorsque je veux convertir 10.40 il me donne dix virgule quatre; donc il ne prend le 0 aprés le 4
Merci encore une fois,le script est :
function int2str($a){
$joakim = explode('.',$a);
if (isset($joakim[1]) && $joakim[1]!=' '){
return int2str($joakim[0]).'virgule '.int2str($joakim[1]) ;
}
if ($a<0) return 'moins '.int2str(-$a);
if ($a<17){
switch ($a){
case 0: return 'Zero';
case 1: return 'Un';
case 2: return 'Deux';
case 3: return 'Trois';
case 4: return 'Quatre';
case 5: return 'Cinq';
case 6: return 'Six';
case 7: return 'Sept';
case 8: return 'Huit';
case 9: return 'Neuf';
case 10: return 'Dix';
case 11: return 'Onze';
case 12: return 'Douze';
case 13: return 'Treize';
case 14: return 'Quatorze';
case 15: return 'Quinze';
case 16: return 'Seize';
}
} else if ($a<20){
return 'dix-'.int2str($a-10);
} else if ($a<100){
if ($a%10==0){
switch ($a){
case 20: return 'Vingt';
case 30: return 'Trente';
case 40: return 'Quarante';
case 50: return 'Cinquante';
case 60: return 'Soixante';
case 70: return 'Soixante-Dix';
case 80: return 'Quatre-Vingt';
case 90: return 'Quatre-Vingt-Dix';
}
} elseif (substr($a, -1)==1){
if( ((int)($a/10)*10)<70 ){
return int2str((int)($a/10)*10).'-et-un';
} elseif ($a==71) {
return 'Soixante et onze';
} elseif ($a==81) {
return 'Quatre vingt un';
} elseif ($a==91) {
return 'Quatre vingt onze';
}
} elseif ($a<70){
return int2str($a-$a%10).'-'.int2str($a%10);
} elseif ($a<80){
return int2str(60).'-'.int2str($a%20);
} else{
return int2str(80).'-'.int2str($a%20);
}
} else if ($a==100){
return 'Cent';
} else if ($a<200){
return int2str(100).' '.int2str($a%100);
} else if ($a<1000){
return int2str((int)($a/100)).' '.int2str(100).' '.int2str($a%100);
} else if ($a==1000){
return 'Mille';
} else if ($a<2000){
return int2str(1000).' '.int2str($a%1000).' ';
} else if ($a<1000000){
return int2str((int)($a/1000)).' '.int2str(1000).' '.int2str($a%1000);
}
}
j'ai trouvé une fonction qui marche bien mais tjrs j'ai un petit problème,
lorsque je veux convertir 10.40 il me donne dix virgule quatre; donc il ne prend le 0 aprés le 4
Merci encore une fois,le script est :
function int2str($a){
$joakim = explode('.',$a);
if (isset($joakim[1]) && $joakim[1]!=' '){
return int2str($joakim[0]).'virgule '.int2str($joakim[1]) ;
}
if ($a<0) return 'moins '.int2str(-$a);
if ($a<17){
switch ($a){
case 0: return 'Zero';
case 1: return 'Un';
case 2: return 'Deux';
case 3: return 'Trois';
case 4: return 'Quatre';
case 5: return 'Cinq';
case 6: return 'Six';
case 7: return 'Sept';
case 8: return 'Huit';
case 9: return 'Neuf';
case 10: return 'Dix';
case 11: return 'Onze';
case 12: return 'Douze';
case 13: return 'Treize';
case 14: return 'Quatorze';
case 15: return 'Quinze';
case 16: return 'Seize';
}
} else if ($a<20){
return 'dix-'.int2str($a-10);
} else if ($a<100){
if ($a%10==0){
switch ($a){
case 20: return 'Vingt';
case 30: return 'Trente';
case 40: return 'Quarante';
case 50: return 'Cinquante';
case 60: return 'Soixante';
case 70: return 'Soixante-Dix';
case 80: return 'Quatre-Vingt';
case 90: return 'Quatre-Vingt-Dix';
}
} elseif (substr($a, -1)==1){
if( ((int)($a/10)*10)<70 ){
return int2str((int)($a/10)*10).'-et-un';
} elseif ($a==71) {
return 'Soixante et onze';
} elseif ($a==81) {
return 'Quatre vingt un';
} elseif ($a==91) {
return 'Quatre vingt onze';
}
} elseif ($a<70){
return int2str($a-$a%10).'-'.int2str($a%10);
} elseif ($a<80){
return int2str(60).'-'.int2str($a%20);
} else{
return int2str(80).'-'.int2str($a%20);
}
} else if ($a==100){
return 'Cent';
} else if ($a<200){
return int2str(100).' '.int2str($a%100);
} else if ($a<1000){
return int2str((int)($a/100)).' '.int2str(100).' '.int2str($a%100);
} else if ($a==1000){
return 'Mille';
} else if ($a<2000){
return int2str(1000).' '.int2str($a%1000).' ';
} else if ($a<1000000){
return int2str((int)($a/1000)).' '.int2str(1000).' '.int2str($a%1000);
}
}