Convert number to letters

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

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.