begin process at 2012 05 28 13:40:14
  Trouver un code source :
 
dans
 
Accueil > 

Code

 > 

Divers

 > ÉCRIRE UN MONTANT MONÉTAIRE SOUS FORME LITTÉRALE

ÉCRIRE UN MONTANT MONÉTAIRE SOUS FORME LITTÉRALE


 Information sur la source

Note :
Aucune note
Catégorie :Divers Classé sous :montant monétaire, forme littérale, nombre, expressions régulières, euro Niveau :Initié Date de création :15/02/2011 Date de mise à jour :15/02/2011 14:01:02 Vu :2 486

Auteur : 007Julien

Ecrire un message privé
Commentaire sur cette source (2)
Ajouter un commentaire et/ou une note

 Description

Un essai d'écriture des montants monétaires sous forme littérale grâce à un simple script sur le poste client.

L'écriture des triplets par récurrence constitue l'originalité de ce script.  

L'utilisation des expressions régulières permet de filtrer les entrées et de proposer en option l'application des recommandations de 1990.

Script à enregistrer en utf-8 pour respecter le charset de la ligne 5.

Source

  • <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
  • <html lang="fr">
  • <head>
  • <title>Des nombres sous forme littérale</title>
  • <meta http-equiv="content-type" content="text/html; charset=utf-8">
  • <style type="text/css">
  • body,input {font-family:georgia;font-size:9pt;color:#000066;}
  • body {margin:0px;padding:20px;}
  • img {border: 0px none;}
  • input{text-align:center;font-size:16px}
  • #ntr{background-color:#ccc;width:140px;}
  • #rsl {font-weight:bold;text-align:center;color:#909;font-size:16px}
  • a {text-decoration:none;}
  • .note{margin-top:-5px;}
  • </style>
  • </head>
  • <body>
  • <h2>«&nbsp;Des montants monétaires en toutes lettres&nbsp;»</h2>
  • <p>Ce script donne la traduction littérale de tout montant monétaire usuel (*) assorti ou non de deux décimales annoncées par une virgule. Les montants sont supposés libellés en euros.<br></p>
  • <p><b>Nombre à traduire sous forme littérale </b>&nbsp;<input type="text" id="ntr" onkeyup="litNbr()">&nbsp;(les espaces de séparation facultatifs ne sont pas pris en compte)</p>
  • <p id="rsl"></p>
  • <p>L'usage consiste à relier les nombres inférieurs à cent par un trait d'union sauf en présence du <i>«et»</i> qui tient lieu de trait d'union.
  • En 1990 des recommandations orthographiques, ont proposé de généraliser les traits d'union pour tous les numéraux à l'exception des noms tels que <i>«million(s)»</i> ou <i>«milliard(s)»</i> (ainsi que les <i>«millier(s)»</i>, ici et ailleurs peu usités) qui ne sont alors ni précédés, ni suivis de traits d'union.</p>
  • <input type="checkbox" id="opt" onclick="litNbr()">&nbsp;Appliquer les recommandations de 1990.<br>
  • <hr>
  • <p class="note">(*) C'est-à-dire inférieur à mille milliards, l'affichage de billions, trillions ou autres septillions d'euros semblant de peu d'utilité pratique.</p>
  • <script type="text/javascript">
  • function $(i) {return document.getElementById(i)};
  • var rng,chn;
  • function enLettres(n){rng=3;chn='';var mtf,crc;
  • while (0<n) n=enTranche(n);
  • chn=chn.replace("ts mille","t mille");// correction des cents et quatre-vingts mille !
  • chn=chn.substr(1).replace(/ /g,"-");// des traits d'union partout
  • if ($('opt').checked) crc="(milliards?|millions?)"
  • else crc="(milliards?|millions?|mille|cents?|et)";
  • mtf=new RegExp("([a-z]+)-"+crc,"ig");// sauf avant...
  • chn=chn.replace(mtf,"$1 $2");
  • mtf=new RegExp(crc+"-([a-z]+)","ig");// et sauf après les mots dits.
  • chn=chn.replace(mtf,"$1 $2");
  • return chn;
  • }
  • function enTranche(n){var r=rng,s=1,m;
  • while (0<r--) s=s*1000;m=Math.floor(n/s);
  • if (m!=0) switch (rng) {
  • case 3:chn+=triplets(m)+' milliard';if (1<m) chn+='s';break;
  • case 2:chn+=triplets(m)+' million';if (1<m) chn+='s';break;
  • case 1:chn+=((1!=m)?triplets(m):'')+' mille';break;
  • case 0:chn+=triplets(m);break; }
  • rng--;
  • return n-s*m
  • }
  • function triplets(n){var c,m,r;
  • c='';r=0;s=0;
  • if (200<=n) {m=Math.floor(n/100);c+=triplets(m)+' cent';n-=m*100}
  • if (0==n) {c+='s';return c}
  • if (100<=n) {c+=" cent";n-=100}
  • if (0==n) return c;
  • if (80<=n) {c+=' quatre-vingt';n-=80;c+=(n==0)?'s':''}
  • if (60<=n) {c+=' soixante';n-=60;r=1;s=1}
  • if (50<=n) {c+=' cinquante';n-=50;r=1}
  • if (40<=n) {c+=' quarante';n-=40;r=1}
  • if (30<=n) {c+=' trente';n-=30;r=1}
  • if (20<=n) {c+=' vingt';n-=20;r=1}
  • if (0==n) return c;
  • if ((1==n && 1==r) || (11==n && s==1)) c+=' et'
  • return c+' '+'zéro,un,deux,trois,quatre,cinq,six,sept,huit,neuf,dix,onze,douze,treize,quatorze,quinze,seize,dix-sept,dix-huit,dix-neuf'.split(/,/g)[n];
  • }
  • function litNbr(){var a,z,e=$('ntr').value,n,m,r,s;
  • n=e.replace(/[^\d,\s]+/g,'');// sans signes étrangers
  • n=n.replace(/(,[\d]{0,2}),\d?$/g,"$1");// sans deux virgules
  • n=n.replace(/(,\d\d)[\d,\s]+$/g,"$1");// sans plus de deux décimales
  • if (n!=e) $('ntr').value=n;
  • m=n.replace(/[\s]+/g,'');//sans blancs
  • a=parseInt(m.replace(/^([\d]*)(,|\b)[\d]{0,2}$/g,"$1"));// éclaté
  • z=m.replace(/^([\d]*)(,|\b)([\d]*)$/g,"$3");
  • m=m.replace(/,/g,'.');
  • if (12<a.toString().length) {alert("Nombre trop grand");return}
  • if (z.toString().length==1) z+='0';
  • r='';if (a) {s=enLettres(a)+' euro'+((1<m)?'s ':' ');
  • s=s.replace(/((ion|iard)s?) euro/g,"$1 d&#8217;euro");// millions et milliards d'euros !
  • r+=s;}
  • if (z=parseInt(z,10)) r+=triplets(z)+' centime'+((1<z)?'s ':' ');
  • if (!a && z) r+='d&#8217;euro';
  • $('rsl').innerHTML=r;
  • }
  • </script>
  • </body>
  • </html>
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html lang="fr">
<head>
<title>Des nombres sous forme littérale</title>
<meta http-equiv="content-type" content="text/html; charset=utf-8">
<style type="text/css">
body,input {font-family:georgia;font-size:9pt;color:#000066;}
body {margin:0px;padding:20px;}
img {border: 0px none;}
input{text-align:center;font-size:16px}
#ntr{background-color:#ccc;width:140px;}
#rsl {font-weight:bold;text-align:center;color:#909;font-size:16px}
a {text-decoration:none;}
.note{margin-top:-5px;}
</style>
</head>
<body>
<h2>«&nbsp;Des montants monétaires en toutes lettres&nbsp;»</h2>
<p>Ce script donne la traduction littérale de tout montant monétaire usuel (*) assorti ou non de deux décimales annoncées par une virgule. Les montants sont supposés libellés en euros.<br></p>
<p><b>Nombre à traduire sous forme littérale </b>&nbsp;<input type="text" id="ntr" onkeyup="litNbr()">&nbsp;(les espaces de séparation facultatifs ne sont pas pris en compte)</p>
<p id="rsl"></p>
<p>L'usage consiste à relier les nombres inférieurs à cent par un trait d'union sauf en présence du <i>«et»</i> qui tient lieu de trait d'union.
En 1990 des recommandations orthographiques, ont proposé de généraliser les traits d'union pour tous les numéraux à l'exception des noms tels que <i>«million(s)»</i> ou <i>«milliard(s)»</i> (ainsi que les <i>«millier(s)»</i>, ici et ailleurs peu usités) qui ne sont alors ni précédés, ni suivis de traits d'union.</p>
<input type="checkbox" id="opt" onclick="litNbr()">&nbsp;Appliquer les recommandations de 1990.<br>
<hr>
<p class="note">(*) C'est-à-dire inférieur à mille milliards, l'affichage de billions, trillions ou autres septillions d'euros semblant de peu d'utilité pratique.</p>

<script type="text/javascript">

function $(i) {return document.getElementById(i)};

var rng,chn;
function enLettres(n){rng=3;chn='';var mtf,crc;
	while (0<n) n=enTranche(n);
	chn=chn.replace("ts mille","t mille");// correction des cents et quatre-vingts mille !
	chn=chn.substr(1).replace(/ /g,"-");// des traits d'union partout
	if ($('opt').checked) crc="(milliards?|millions?)"
	else crc="(milliards?|millions?|mille|cents?|et)";
	mtf=new RegExp("([a-z]+)-"+crc,"ig");// sauf avant...
	chn=chn.replace(mtf,"$1 $2");
	mtf=new RegExp(crc+"-([a-z]+)","ig");// et sauf après les mots dits.
	chn=chn.replace(mtf,"$1 $2");
	return chn;
}
function enTranche(n){var r=rng,s=1,m;
	while (0<r--) s=s*1000;m=Math.floor(n/s);
	if (m!=0) switch (rng) {
	case 3:chn+=triplets(m)+' milliard';if (1<m) chn+='s';break;
	case 2:chn+=triplets(m)+' million';if (1<m) chn+='s';break;
	case 1:chn+=((1!=m)?triplets(m):'')+' mille';break;
	case 0:chn+=triplets(m);break; }
	rng--;
	return n-s*m
}
function triplets(n){var c,m,r;
	c='';r=0;s=0;
 	if (200<=n) {m=Math.floor(n/100);c+=triplets(m)+' cent';n-=m*100}
	if (0==n) {c+='s';return c}
	if (100<=n) {c+=" cent";n-=100}
	if (0==n) return c;
	if (80<=n) {c+=' quatre-vingt';n-=80;c+=(n==0)?'s':''}
	if (60<=n) {c+=' soixante';n-=60;r=1;s=1}
	if (50<=n) {c+=' cinquante';n-=50;r=1}
	if (40<=n) {c+=' quarante';n-=40;r=1}
	if (30<=n) {c+=' trente';n-=30;r=1}
	if (20<=n) {c+=' vingt';n-=20;r=1}
	if (0==n) return c;
	if ((1==n && 1==r) || (11==n && s==1)) c+=' et'
	return c+' '+'zéro,un,deux,trois,quatre,cinq,six,sept,huit,neuf,dix,onze,douze,treize,quatorze,quinze,seize,dix-sept,dix-huit,dix-neuf'.split(/,/g)[n];
}

function litNbr(){var a,z,e=$('ntr').value,n,m,r,s;
	n=e.replace(/[^\d,\s]+/g,'');// sans signes étrangers
	n=n.replace(/(,[\d]{0,2}),\d?$/g,"$1");// sans deux virgules
	n=n.replace(/(,\d\d)[\d,\s]+$/g,"$1");// sans plus de deux décimales
  if (n!=e) $('ntr').value=n;
	m=n.replace(/[\s]+/g,'');//sans blancs
	a=parseInt(m.replace(/^([\d]*)(,|\b)[\d]{0,2}$/g,"$1"));// éclaté
	z=m.replace(/^([\d]*)(,|\b)([\d]*)$/g,"$3");
	m=m.replace(/,/g,'.');
	if (12<a.toString().length) {alert("Nombre trop grand");return}
	if (z.toString().length==1) z+='0';
	r='';if (a) {s=enLettres(a)+' euro'+((1<m)?'s ':' ');
    s=s.replace(/((ion|iard)s?) euro/g,"$1 d&#8217;euro");// millions et milliards d'euros !
    r+=s;}
	if (z=parseInt(z,10)) r+=triplets(z)+' centime'+((1<z)?'s ':' ');
	if (!a && z) r+='d&#8217;euro';
  $('rsl').innerHTML=r;
}
</script>
</body>
</html>

 Conclusion


Encore une fois javascript permet de simplifier les tâches des utilisateurs.


 Historique

15 février 2011 14:01:02 :
Achèvement de la rédaction de la conclusion Avertissement pour l'enregistrement du script en utf-8. Correction du code pour remplacer z par parseInt(z,10) (élimination du zéro initial éventuels des centimes en évitant la traduction en octal).

 Sources du même auteur

Source avec Zip Source avec une capture PUISSANCE 4
Source avec Zip CALENDRIER ANNUEL UNIVERSEL AVEC SAINTS DU CALENDRIER ET FÊT...
Source avec Zip LE COMPTE EST BON

 Sources de la même categorie

Source avec Zip Source avec une capture SLIDESHOW IMAGES ET TEXTES EN PUR JAVASCRIPT par ansuzpeorth
Source avec Zip INPUT TEXT AUTOMATIQUE CREATION SUPPRESSION par lycanges
Source avec Zip Source avec une capture TABLE_SV : TABLEAU DYNAMIQUE, MONTRER/CACHER COLONNE SUR DEM... par synanceia
COLONNES ADAPTABLES EN HAUTEUR par dronoide
Source avec Zip VECTEURS ET MATRICES: OUTILS GRAPHIQUES UTILES par william voirol

 Sources en rapport avec celle ci

OBTENIR LE NOMBRE DE JOURS D'UN MOIS SUIVANT SON ANNÉE par hugolegrand
TROUVER LES FACTEURS D'UN NOMBRE par jdmcreator
NOMBRE ALÉATOIRE par gt_371
Source avec Zip Source avec une capture CONVERSION DES NOMBRES EN LETTRE par bricegala
CARDINAUX ET ORDINAUX par pabbati

Commentaires et avis

Commentaire de alex610 le 01/05/2011 07:12:47

peut on avoir trois chiffre apres la virgule

Commentaire de 007Julien le 02/05/2011 01:07:33

Oui bien entendu, il suffit de modifier le code...

Les premières lignes de la fonction litNbr() modifient autoritairement les entrées (la ligne 76 assure la réécriture si les lignes précédentes ont modifiés l'entrée e).

La ligne 73 supprime tout ce qui n'est pas digit, virgule ou espace de séparation...
La ligne 74 m'apparaît maintenant inutile, il suffit donc de la supprimer et de modifier la ligne 75 pour ne conserver qu'au plus trois décimales après la virgule (et supprimer ainsi tout ce qui pourrait suivre) :

n=n.replace(/(,[\d]{0,3})[\d,\s]+$/g,"$1");// sans plus de trois décimales

D'autres modifications sont indispensables notamment lors de la séparation de la partie entière et des décimales :

a=parseInt(m.replace(/^([\d]*)(,|\b)[\d]{0,3}$/g,"$1"));// éclaté

Encore qu'il ne soit pas utile de détailler la partie décimale pour ne conserver que la partie entière, l'expression suivante serait donc préférable
a=parseInt(m.replace(/^([\d]*)(,|\b)[\d]*$/g,"$1"));// éclaté

Ensuite, il convient de construire un nombre de trois chiffres pour les parties décimales incomplètes (0,3 Euros doit donner 300 millimes d'Euros et 0,57 Euros doit donner 570 millimes d'Euros.

Remplacer la ligne 82 : if (z.toString().length==1) z+='0';
par while (z.toString().length<3) z+='0';

Enfin les centimes doivent donner place à des millimes à moins qu'il ne s'agisse plus d'Euros mais de toute autre grandeur mesurable...

Bonne continuation

 Ajouter un commentaire


Discussions en rapport avec ce code source dans le forum

SOS URGENT CALCUL DEVIS FACTURE [ par westcambon ] j'ai realiser un vite en visuel avec dreamweaver , j'ai un formulaire ou on choissi sa formuleainsi de suite je souhaite que toutes ces formules = un couleur cellule varie selon valeurs texte [ par jpdeion ] Bonour,voila je d&#233;bute, dans un tableau html avec des donn&#233;es textes (nombres import&#233;es avec ASP ou PHP (je sais d&#233;j&#224; faire c nombre checkbox cochées [ par cseagle ] Bonjour, Je souhaiterai savoir combien de checkbox dans mon formulaire ont &#233;t&#233; coch&#233;es. A savoir que mes checkbox portent le nom siteX nombre premier [ par jeranvier ] bonjours! alors otut d'abord merci de lire ce message etc etc... alors voila, je suis pas nouveau dans la programmation , mais je ne suis pas une bete Choix du nombre de ticket par jour [ par toutkado ] bonjour,je suis en train d'inserez sur mon site un ticket a gratter ,mais je ne sais pas comment faire pour que les membre du site ne puisse pas gratt Afficher le nombre de jour d'un mois en fonction du mois selectionne [ par Monico9385 ] Bonjour tout le monde, alors voila mon probleme: j'ai 2 select, un contenant les mois numerot&#233;s de 01 &#224; 12, et un autre contenant les jour Limiter à 1 le nombre de clicks sur un lien de type HREF [ par comodor ] J'ai un lien de type href sur une page. Quand on click dessus &#231;a ouvre une popup et une fenetre de t&#233;l&#233;chargement. A la fin du telechar Paginer un texte suivant le nombre de ligne [ par alrach ] Hello, Je suis un peu novice en Javascript et je cherche comment r&#233;aliser un truc: J'ai un texte dynamique et un nombre de ligne maximum su nombre d'image pour diaporama [ par bosto ] Bonjour,Je suis super d&#233;butant et surtout graphiste pas technicien. Ma question est peut etre tres simple mais je ne trouve pas de reponse sur le Nombre d'affichage d'une banière publicitaire [ par emna_bz ] Bonsoir,&nbsp;&nbsp;&nbsp; Comment le marchand peut savoir le nombre d'affichage de son bani&#232;re publicitaire dynamique au niveau d'un autre site(


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 2,402 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales