Convert number to letters

Soyez le premier à donner votre avis sur cette source.

Vue 7 558 fois - Téléchargée 499 fois

Description

Convert number to letters
//this is new approach to convert number to letters depending on
//the length of number so it take the number as a string then convert it
//without the need of calculation
//The code also use the old system numbers(million,milliard,billion,billiard....)
//but you can also use the new system(million,billion,trillion,quadrillion..)

Source / Exemple :


/*-----------------------------------------------------------------*/
DROP FUNCTION IF EXISTS tab_1_19;
DELIMITER $$
CREATE FUNCTION tab_1_19(xv int) RETURNS varchar(255)
BEGIN
   DECLARE xch Varchar(20);
	          CASE  xv
			     WHEN  0   THEN	SET xch := ' ';
				 WHEN  1   THEN	SET xch := ' un';
				 WHEN  2   THEN	SET xch := ' deux';
				 WHEN  3   THEN	SET xch := ' trois';
				 WHEN  4   THEN	SET xch := ' quatre';
				 WHEN  5   THEN	SET xch := ' cinq';
				 WHEN  6   THEN	SET xch := ' six';
				 WHEN  7   THEN	SET xch := ' sept'; 
				 WHEN  8   THEN	SET xch := ' huit';
				 WHEN  9   THEN	SET xch := ' neuf';
				 WHEN  10  THEN	SET xch := ' dix' ;
				 WHEN  11  THEN	SET xch := ' onze';
				 WHEN  12  THEN	SET xch := ' douze';
				 WHEN  13  THEN	SET xch := ' treize';
				 WHEN  14  THEN	SET xch := ' quatorze';
				 WHEN  15  THEN	SET xch := ' quinze';
				 WHEN  16  THEN	SET xch := ' seize';
				 WHEN  17  THEN	SET xch := ' dix-sept';
				 WHEN  18  THEN	SET xch := ' dix-huit';
				 WHEN  19  THEN	SET xch := ' dix-neuf';
				END CASE;  
	RETURN xch;
END
$$
DELIMITER ;

DROP FUNCTION IF EXISTS tab_20_90;
DELIMITER $$
CREATE FUNCTION tab_20_90(xv int) RETURNS varchar(255)
BEGIN
   DECLARE xch Varchar(20);
				    CASE xv
				      WHEN  2   THEN	SET xch := ' vingt';
				      WHEN  3   THEN	SET xch := ' trente';
				      WHEN  4   THEN	SET xch := ' quarante';
				      WHEN  5   THEN	SET xch := ' cinquante';
				      WHEN  6   THEN	SET xch := ' soixante';
					  WHEN  7   THEN	SET xch := ' soixante-dix';
					  WHEN  8   THEN	SET xch := ' quatre-vingt';
					  WHEN  9   THEN	SET xch := ' quatre-vingt-dix';
					END CASE;    

	RETURN xch;
END
$$
DELIMITER ;

DROP FUNCTION IF EXISTS tabx;
DELIMITER $$
CREATE FUNCTION tabx(xv int) RETURNS varchar(255)
BEGIN
   DECLARE xch Varchar(20);
   			     CASE xv 
				    WHEN 1 THEN   SET  xch := ' cent';
				    WHEN 2 THEN   SET  xch := ' mille';
				    WHEN 3 THEN   SET  xch := ' million';
				    WHEN 4 THEN   SET  xch := ' milliard';
					WHEN 5 THEN   SET  xch := ' billion';
				  End Case;
	RETURN xch;
END
$$

DELIMITER ;
/*------------------------------------------------------------------------------*/
DROP FUNCTION IF EXISTS result_1_99;
DELIMITER $$
CREATE FUNCTION result_1_99(ch varchar(255)) RETURNS varchar(255)
BEGIN
  DECLARE xv INT;
  SET xv = CAST(ch as UNSIGNED); 
  
   CASE 
     WHEN XV BETWEEN 0 AND 19 THEN  RETURN  tab_1_19(CAST(ch as UNSIGNED));
	 
     WHEN XV BETWEEN 20 AND 99 THEN 
         CASE XV
		      WHEN XV IN(20,30,40,50,60) THEN  RETURN  tab_20_90(CAST(SUBSTRING(ch,1,1) AS UNSIGNED));
			  WHEN XV IN(21,31,41,51,61) THEN  RETURN  CONCAT(tab_20_90(CAST(SUBSTRING(ch,1,1) AS UNSIGNED)) , ' et' , tab_1_19(CAST(SUBSTRING(ch,2,1) AS UNSIGNED)));
              WHEN XV = 80               THEN  RETURN  tab_20_90(CAST(SUBSTRING(ch,1,1)  AS UNSIGNED));
              WHEN XV BETWEEN 70 AND 79  THEN  RETURN  CONCAT(tab_20_90(CAST(SUBSTRING(ch,1,1) AS UNSIGNED) - 1) , '-' , SUBSTRING(tab_1_19(CAST(ch AS UNSIGNED) - 60),2,length(tab_1_19(CAST(ch AS UNSIGNED) - 60)) -1));
              WHEN XV BETWEEN 81 AND 89  THEN  RETURN  CONCAT(tab_20_90(CAST(SUBSTRING(ch,1,1) AS UNSIGNED)) , '-' ,  SUBSTRING(tab_1_19(CAST(ch AS UNSIGNED) - 80),2,length(tab_1_19(CAST(ch  AS UNSIGNED) - 80) -1)));
              WHEN XV BETWEEN 90 AND 99  THEN  RETURN  CONCAT(tab_20_90(CAST(SUBSTRING(ch,1,1) AS UNSIGNED) - 1) , '-' , SUBSTRING(tab_1_19(CAST(ch AS UNSIGNED) - 80),2,length(tab_1_19(CAST(ch  AS UNSIGNED) - 80))-1 ));
          ELSE
            RETURN  CONCAT(tab_20_90(CAST(SUBSTRING(ch,1,1) AS UNSIGNED)) , '-' , SUBSTRING(tab_1_19(CAST(SUBSTRING(ch,2,1)  AS UNSIGNED)),2,length(tab_1_19(CAST(SUBSTRING(ch,2,1)  AS UNSIGNED))) -1));
          END CASE;
   ELSE
     RETURN '';
   END CASE;
	
END
$$
DELIMITER ;

/*-------------------------------------------------------------------*/
/*--------------------------------------------------------------------*/
/*--------------------------------------------------------------------*/
DROP FUNCTION IF EXISTS Convert_FR;
DELIMITER $$
CREATE FUNCTION Convert_FR(chIFfre real, SM varchar(40),CM varchar(40)) RETURNS varchar(255)
BEGIN
   DECLARE ch_int Varchar(20);
   DECLARE ch, ch_r Varchar(255);
   DECLARE i, fin_I INT;
   
 

   SET ch_int = chIFfre * 100 div 100 ;
   SET ch_r = '';
   SET fin_i = length(ch_int) div 3;
   
   IF length(ch_int) > fin_i * 3 THEN 
      SET ch = SUBSTRING(ch_int,1, length(ch_int) - fin_i * 3);
      SET ch_r = result_1_99(ch);
     IF  CAST(ch AS UNSIGNED) = 1 AND fin_i = 1 THEN 
          SET ch_r = tabx(fin_i + 1);
	 ELSE
      IF length(ch_int) > 2 THEN
         SET ch_r = CONCAT(ch_r , tabx(fin_i + 1));
	  END IF; 
	 END IF;
   END IF; 

   SET  i = fin_i ;
   WHILE I > 0 DO
       SET ch = SUBSTRING(ch_int, length(ch_int) - i * 3 + 1 , 3);

       CASE CAST(SUBSTRING(ch,1,1)  AS UNSIGNED) 
          WHEN 0 THEN  SET ch_r = CONCAT(ch_r , result_1_99(SUBSTRING(ch,1,1))); /* dans le cas 0, on peut remplacer result_1_99(SUBSTRING(ch,1,1)) par une chaine vide. C'est à dire   ch_r = ch_r + ''; */
          WHEN 1 THEN  SET ch_r = CONCAT(ch_r , tabx(1)); /* là aussi on peut mettre cent à la place de tab[1] */
       ELSE
          SET ch_r =  CONCAT(ch_r ,  result_1_99(SUBSTRING(ch,1,1)) , tabx(1));
       END CASE;

       IF (i = 2) AND (CAST(ch  AS UNSIGNED) = 1) THEN /* pour le cas de  par ex 125001489 */
          SET ch_r = CONCAT(ch_r , SUBSTRING(result_1_99(SUBSTRING(ch,2,2)),3,length(result_1_99(SUBSTRING(ch,2,2))) - 3 ));
       ELSE 
          SET ch_r = CONCAT(ch_r , result_1_99(SUBSTRING(ch,2,2)));
	   END IF;

       IF (i > 1) AND (CAST(ch AS UNSIGNED) > 0) THEN
          SET ch_r = CONCAT(ch_r , tabx(i));
	   END IF;  
	   
	   SET I = I - 1;
    END WHILE;   
      
   IF Trim(SM) <> '' THEN
      SET ch_r = CONCAT(Upper(SUBSTRING(ch_r,2,1)) , SUBSTRING(ch_r,3,length(ch_r) - 2) , SM);
      IF chiffre * 100 MOD 100 > 0 THEN
	  /* ch_r := ch_r + ', et ' + SUBSTRING(floattostr(frac(chiffre) + 1.005 ),3,2) + ' ' centimes.'; */
		SET ch_r = CONCAT(ch_r , ' et ' , result_1_99(chiffre * 100 MOD 100 ) , CM);
	  END IF;	
    /* le 1.005 pour obtenir le bon resultat, enlever le et essayer avec les montants suivants:  par ex  15,20 ou 147,50 */
   END IF;
   
   RETURN  ch_r;
END
$$

DELIMITER ;

Codes Sources

A voir également

Ajouter un commentaire

Commentaires

cs_maimounmahdi
Messages postés
12
Date d'inscription
lundi 11 août 2008
Statut
Membre
Dernière intervention
26 mars 2012
-
Bien fait !!!
Pasokoniidesuka
Messages postés
21
Date d'inscription
mercredi 21 juillet 2010
Statut
Membre
Dernière intervention
17 janvier 2012
-
J'ai utilisé le langage SQL dans plusieurs projets mais je n'aurais jamais imaginé de requêtes aussi longues... xD
Joli.
On aura beau classifier ça comme débutant ça semble dépasser de loin ce que je suis capable de faire...
FERHATMOH
Messages postés
4
Date d'inscription
lundi 4 juin 2007
Statut
Membre
Dernière intervention
28 novembre 2013
-
BONJOUR
JE VOUDRAIS SAVOIR OU JE DOIS ECRIRE LE FICHIER SOURCE DANS PAR EXEMPLE WORD OU BLOC NOTE
SALUTATIONS

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.