[PHP] Convertir un chiffre en lettre [Fermé]

Signaler
Messages postés
9
Date d'inscription
dimanche 2 septembre 2007
Statut
Membre
Dernière intervention
21 novembre 2008
-
 Nyssam -
bonjour ,je cherche un script php qui permet de convertir un chiffre en lettre.
Merci.

3 réponses

Messages postés
2
Date d'inscription
vendredi 27 février 2009
Statut
Membre
Dernière intervention
27 mars 2009
10
Je te donne une vrai réponse (très tardive mais comme cela sort en 1 sur Google, je préfère une bonne réponse de suite) :

<?php

function int2str($a){
	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';
			}
		} else if ($a<70){
			return int2str($a-$a%10).' '.int2str($a%10);
		} else if ($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);
	}  
	//on pourrait pousser pour aller plus loin, mais c'est sans interret pour ce projet, et pas interessant, c'est pas non plus compliqué...
}
echo int2str("19994"); // et voilà ce que ca donne

?>
8
Merci

Quelques mots de remerciements seront grandement appréciés. Ajouter un commentaire

CCM 57403 internautes nous ont dit merci ce mois-ci

Si on teste avec une valeur qui se termine par zéros:par ex 5000.Ca donne "cinq mille zero" .

<?php
function int2str($a){
...........................................
.........................................

} else if ($a<1000000){

//ajoutez ceci
if($a%1000!=0){
$reste=int2str($a%1000);
}
else
{$reste='';
}


return int2str((int)($a/1000)).' '.int2str(1000).' '.$reste;
}
}
?>
Meme çi j'ai ajouté cela la fonction m'affiche toujours un zero : 20900====vingt mille neuf cent zero j'ai besoin d'une solution en urgence SVP!!!!!!!
Messages postés
10
Date d'inscription
vendredi 17 juillet 2009
Statut
Membre
Dernière intervention
26 février 2017

Avez vous une solution pour le problème de ce zero
Bonjour,
Voici la modif du fin de code de Airwolf77, pour enlever les "zéro"s inutiles.
L'ajouts des 3 tirets manquants ainsi que le else final toujours important !

.....
	} 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';
			}
		} else if ($a<70){
			return int2str($a-$a%10).'-'.int2str($a%10);
		} else if ($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).($a%100!=0?' '.int2str($a%100):'');
	} else if ($a<1000){
		return int2str((int)($a/100)).' '.int2str(100).' '.($a%100!=0?int2str($a%100):'');
	} else if ($a==1000){
		return 'mille';
	} else if ($a<2000){
		return int2str(1000).($a%1000!=0?' '.int2str($a%1000):'');
	} else if ($a<1000000){
		return int2str((int)($a/1000)).' '.int2str(1000).' '.($a%1000!=0?int2str($a%1000):'');
	}  
	//on pourrait pousser pour aller plus loin, mais c'est sans interret pour ce projet, et pas interessant, c'est pas non plus compliqué...
	else return $a;
}
ca marche impeccable !!!!
beau travail et merci encore, meme si c'est pas moi qui rest initier le post mais ca m'a vachement aidé.
merci !!!!!!!!!!!!!
Messages postés
2480
Date d'inscription
vendredi 29 octobre 2004
Statut
Contributeur
Dernière intervention
13 février 2018
584
Salut,

<?php
// Définition de la fonction convert
function convert( $Texte )
	{
		$string = array(
			"1" => "A",
			"2" => "B",
			"3" => "C",
			"4" => "D",
			"5" => "E",
			"6" => "F",
			"7" => "G",
		);
		
		$Texte = strtr("$Texte", $string);
		return $Texte;
	}

$variable="1369";
echo  'Sans la fonction convert : ' . $variable . '<br />
Avec la fonction convert : ' . convert( $variable );
?>
Messages postés
38681
Date d'inscription
mercredi 11 avril 2007
Statut
Modérateur
Dernière intervention
28 juillet 2020
7 985
Bonjour Outhman....
Est-ce que ceci correspond a ta requète ???? ===> Clique ici
Pour plus de choix ===> Regarde là
Salut
Messages postés
2480
Date d'inscription
vendredi 29 octobre 2004
Statut
Contributeur
Dernière intervention
13 février 2018
584
Je suis sur que du visual basique va l'aider :p
this works great but does not converts millions
Messages postés
18
Date d'inscription
mardi 29 mars 2011
Statut
Membre
Dernière intervention
6 avril 2012
3
mais par exemple 200 -> deux cent zero
Messages postés
1
Date d'inscription
mercredi 20 novembre 2013
Statut
Membre
Dernière intervention
20 novembre 2013

Bonjour,
vous pouvez l'utiliser j'ai corriger l'erreur



<?php
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){
if($a%100==0)
return int2str((int)($a/100)).' '.int2str(100);
if($a%100!=0)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);
}
}
?>

vous constaterez que l'erreur se situé a ce niveau
au lieu de faire ceci
else if ($a<1000){
if($a%100!=0)return int2str((int)($a/100)).' '.int2str(100).' '.int2str($a%100);
}
vous devez plutot mettre ça
else if ($a<1000){
if($a%100==0)
return int2str((int)($a/100)).' '.int2str(100);
if($a%100!=0)return int2str((int)($a/100)).' '.int2str(100).' '.int2str($a%100);
}
parce qu"il y'a deux cas qui se présente
le cas le modulo est zero
if($a%100==0)
return int2str((int)($a/100)).' '.int2str(100);
le cas ou il est different de zero
if($a%100!=0)return int2str((int)($a/100)).' '.int2str(100).' '.int2str($a%100);
Messages postés
8
Date d'inscription
mardi 10 janvier 2012
Statut
Membre
Dernière intervention
21 juillet 2015
>
Messages postés
1
Date d'inscription
mercredi 20 novembre 2013
Statut
Membre
Dernière intervention
20 novembre 2013

il me semble que l'erreur persiste encore