MAKHALID
Messages postés
2
Date d'inscription
vendredi 6 mai 2005
Statut
Membre
Dernière intervention
20 juin 2006
20 juin 2006 à 17:57
Bonjour
Voici deux fonctions avec un exemple d'utilisation
----------------------------------------------------------
FUNCTION to_word_en(pn$nombre IN NUMBER)
RETURN VARCHAR2
AS
--
TYPE table_varchar IS TABLE OF VARCHAR2 (255);
--
lv$multiples table_varchar := table_varchar ('',
' thousand ',
' million ',
' billion ',
' trillion ',
' quadrillion ',
' quintillion ',
' sextillion ',
' septillion ',
' octillion ',
' nonillion ',
' decillion ',
' undecillion ',
' duodecillion ',
' tridecillion ',
' quaddecillion ',
' quindecillion ',
' sexdecillion ',
' septdecillion ',
' octdecillion ',
' nondecillion ',
' dedecillion '
);
lv$entier VARCHAR2 (255) := TRUNC (TO_NUMBER (REPLACE (pn$nombre, ' ', '')));
lv$decimales VARCHAR2 (255) := SUBSTR (pn$nombre - lv$entier, 2);
lv$mots_complets VARCHAR2 (4000);
lv$entier_lettres VARCHAR2 (4000);
BEGIN
--
-- Traitement de la partie décimale
--
IF NVL (lv$decimales, 0) != 0
THEN
FOR i IN 1 .. lv$multiples.COUNT
LOOP
EXIT WHEN lv$decimales IS NULL;
--
IF (SUBSTR (lv$decimales, LENGTH (lv$decimales) - 2, 3) <> 0)
THEN
lv$mots_complets :=
TO_CHAR (TO_DATE (SUBSTR (lv$decimales,
LENGTH (lv$decimales) - 2,
3
),
'j'
),
'jsp'
)
|| lv$multiples (i)
|| lv$mots_complets;
END IF;
lv$decimales := SUBSTR (lv$decimales, 1, LENGTH (lv$decimales) - 3);
END LOOP;
-- Annonce la décimale (remplacer par Euro pour les montants en euros par exemple)
lv$mots_complets := ' point ' || lv$mots_complets;
END IF;
--
-- Traitement de la partie entière
--
IF NVL (lv$entier, 0) = 0
THEN
lv$mots_complets := 'zero';
ELSE
FOR i IN 1 .. lv$multiples.COUNT
LOOP
EXIT WHEN lv$entier IS NULL;
--
IF (SUBSTR (lv$entier, LENGTH (lv$entier) - 2, 3) <> 0)
THEN
lv$mots_complets :=
TO_CHAR (TO_DATE (SUBSTR (lv$entier, LENGTH (lv$entier) - 2,
3),
'j'
),
'jsp'
)
|| lv$multiples (i)
|| lv$mots_complets;
END IF;
lv$entier := SUBSTR (lv$entier, 1, LENGTH (lv$entier) - 3);
END LOOP;
END IF;
RETURN lv$mots_complets;
END to_word_en;
--------------------------------------------------------------------------
----------------------------------------------------------------------------
FUNCTION translate_fr(pn$nombre_en in varchar2)
RETURN VARCHAR2
AS
BEGIN
RETURN REPLACE( REPLACE( REPLACE( REPLACE( REPLACE(
REPLACE( REPLACE( REPLACE( REPLACE( REPLACE(
REPLACE( REPLACE( REPLACE( REPLACE( REPLACE(
REPLACE( REPLACE( REPLACE( REPLACE( REPLACE(
REPLACE( REPLACE( REPLACE( REPLACE( REPLACE(
REPLACE( REPLACE( REPLACE( REPLACE( REPLACE(
REPLACE( REPLACE( REPLACE( REPLACE( REPLACE(
REPLACE( REPLACE( REPLACE( REPLACE( REPLACE(
REPLACE( REPLACE( REPLACE( REPLACE( REPLACE(
REPLACE( REPLACE( REPLACE( REPLACE( REPLACE(
REPLACE( REPLACE( REPLACE( REPLACE( REPLACE(
REPLACE( REPLACE( REPLACE( REPLACE( REPLACE(
REPLACE( REPLACE( REPLACE( REPLACE( REPLACE(
REPLACE( REPLACE( REPLACE( REPLACE( REPLACE(
REPLACE( REPLACE( REPLACE( REPLACE( REPLACE(
REPLACE( REPLACE( REPLACE( REPLACE( REPLACE(
REPLACE( REPLACE( REPLACE( REPLACE( REPLACE(
REPLACE( REPLACE( REPLACE( REPLACE( REPLACE(
REPLACE( REPLACE( REPLACE( REPLACE( REPLACE(
REPLACE( REPLACE( REPLACE( REPLACE( REPLACE(
REPLACE( REPLACE( REPLACE( REPLACE( REPLACE(
REPLACE( REPLACE( REPLACE( REPLACE( REPLACE(
REPLACE( REPLACE( REPLACE( REPLACE(
pn$nombre_en
, 'million' , 'millions' )
, 'billion' , 'milliards' )
, 'trillion' , 'trillions' )
, 'quadrillion' , 'quadrillions' )
, 'quintillion' , 'cintillions' )
, 'sextillion' , 'sextillions' )
, 'septillion' , 'septillions' )
, 'octillion' , 'octillions' )
, 'nonillion' , 'nonillions' )
, 'decillion' , 'decillions' )
, 'undecillion' , 'undecillions' )
, 'duodecillion' , 'duodecillions' )
, 'tridecillion' , 'tridecillions' )
, 'quaddecillion' , 'quaddecillions' )
, 'quindecillion' , 'quindecillions' )
, 'sexdecillion' , 'sexdecillions' )
, 'septdecillion' , 'septdecillions' )
, 'octdecillion' , 'octdecillions' )
, 'nondecillion' , 'nondecillions' )
, 'dedecillion' , 'dedecillions' )
, 'thousand' , 'mille' )
, 'hundred' , 'cent' )
, 'ninety' , 'quatre-vingt-dix')
, 'eighty' , 'quatre-vingts' )
, 'seventy' , 'soixante-dix' )
, 'sixty' , 'soixante' )
, 'fifty' , 'cinquante' )
, 'forty' , 'quarante' )
, 'thirty' , 'trente' )
, 'twenty' , 'vingt' )
, 'nineteen' , 'dix-neuf' )
, 'eighteen' , 'dix-huit' )
, 'seventeen' , 'dix-sept' )
, 'sixteen' , 'seize' )
, 'fifteen' , 'quinze' )
, 'fourteen' , 'quatorze' )
, 'thirteen' , 'treize' )
, 'twelve' , 'douze' )
, 'eleven' , 'onze' )
, 'ten' , 'dix' )
, 'nine' , 'neuf' )
, 'eight' , 'huit' )
, 'seven' , 'sept' )
, 'five' , 'cinq' )
, 'four' , 'quatre' )
, 'three' , 'trois' )
, 'two' , 'deux' )
, 'one' , 'un' )
, 'dix-six' , 'seize' )
, 'dix-cinq' , 'quinze' )
, 'dix-quatre' , 'quatorze' )
, 'dix-trois' , 'treize' )
, 'dix-deux' , 'douze' )
, 'dix-un' , 'onze' )
, '-un ' , '-une ' )
, 'un cent' , 'cent' )
, 'un mille' , 'mille' )
, 'une' , 'un' )
, 'soixante-onze' , 'soixante et onze')
, 'quatre-vingts-' , 'quatre-vingt-' )
, '-un' , ' et un' )
, 'quatre-vingt et un', 'quatre-vingt-un' )
, 'deux cent' , 'deux cents' )
, 'trois cent' , 'trois cents' )
, 'quatre cent' , 'quatre cents' )
, 'cinq cent' , 'cinq cents' )
, 'six cent' , 'six cents' )
, 'sept cent' , 'sept cents' )
, 'huit cent' , 'huit cents' )
, 'neuf cent' , 'neuf cents' )
, 'cents ' , 'cent ' )
, 'un millions' , 'un million' )
, 'un bidecillions' , 'un bidecillion' )
, 'un cintillions' , 'un cintillion' )
, 'un milliards' , 'un milliard' )
, 'un trillions' , 'un trillion' )
, 'un quadrillions' , 'un quadrillion' )
, 'un sextillions' , 'un sextillion' )
, 'un septillions' , 'un septillion' )
, 'un octillions' , 'un octillion' )
, 'un nonillions' , 'un nonillion' )
, 'un decillions' , 'un decillion' )
, 'un undecillions' , 'un undecillion' )
, 'un duodecillions' , 'un duodecillion' )
, 'un tridecillions' , 'un tridecillion' )
, 'un quaddecillions' , 'un quaddecillion' )
, 'un quindecillions' , 'un quindecillion' )
, 'un sexdecillions' , 'un sexdecillion' )
, 'un septdecillions' , 'un septdecillion' )
, 'un octdecillions' , 'un octdecillion' )
, 'un nondecillions' , 'un nondecillion' )
, 'un dedecillions' , 'un dedecillion' )
, '-un trillion' , '-un trillions' )
, '-un quadrillion' , '-un quadrillions' )
, '-un sextillion' , '-un sextillions' )
, '-un septillion' , '-un septillions' )
, '-un octillion' , '-un octillions' )
, '-un nonillion' , '-un nonillions' )
, '-un decillion' , '-un decillions' )
, '-un undecillion' , '-un undecillions' )
, '-un duodecillion' , '-un duodecillions' )
, '-un tridecillion' , '-un tridecillions' )
, '-un quaddecillion' , '-un quaddecillions')
, '-un quindecillion' , '-un quindecillions')
, '-un sexdecillion' , '-un sexdecillions' )
, '-un septdecillion' , '-un septdecillions')
, '-un octdecillion' , '-un octdecillions' )
, '-un nondecillion' , '-un nondecillions' )
, '-un dedecillion' , '-un dedecillions' )
, '-un million' , '-un millions' )
, '-un bidecillion' , '-un bidecillions')
, '-un cintillion' , '-un cintillions' )
, '-un milliard' , '-un milliards' )
, 'point' , 'dirhams et' ) ||' cts'
;
END translate_fr;
----------------------------------------------------------------------
exemple d'utilisation
BEGIN
dbms_output.put_line(translate_fr(to_word_en ( 1350 )));
END;