JS séparateur des milliers, Comment le faire ignorer dans le calcul ? |
Bienvenue invité ( Connexion | Inscription )
JS séparateur des milliers, Comment le faire ignorer dans le calcul ? |
5 Aug 2008, 09:58
Message
#1
|
|
Adepte de Macbidouille Groupe : Membres Messages : 68 Inscrit : 4 May 2003 Membre no 7 406 |
Salut à tous,
J'ai enfin réussi à faire ce petit convertisseur Euro/Dollar. Les champs sont formatés à afficher les chiffres comme je voulais, c-à-d (2 chiffres après la virgule et un espace pour séparer les milliers: "0 000 000.00"). Le problème est que une fois le champs formaté, le calcul n'est plus possible à cause du séparateur justement Un as de la programmation saurait-il comment faire ignorer ces espaces à JS, et ainsi obtenir des résultats de calcul même avec des blancs entre les chiffres ? A vrai dire, j'ai trouvé une fonction qui me supprime ces espaces entre les chiffres, mais je n'arrive pas à l'intégrer dans mon convertisseur Je vous montre la fonction qui supprime les espaces entre les chiffres : CODE <script language="javascript"> function supprEspace(f) { var txtNombre=f.nombre.value+""; var txtResultat=""; for (var no=0; no<=txtNombre.length-1; no++) { if (txtNombre.charAt(no)==" ") { txtResultat+=""; } else { txtResultat+=txtNombre.charAt(no); f.resultat.value=txtResultat; } } return false; } </script> <form name="formul" onsubmit="return supprEspace(this)"> <input type="text" name="nombre"> <input type="submit" value="faire"> <input type="text" name="resultat"> </form> Et le convertisseur final : CODE <HTML> <script LANGUAGE="JAVASCRIPT"> function calculer() { var eur = parseFloat(document.getElementById('eur').value); var chang = parseFloat(document.getElementById('chang').value); document.getElementById('dol').value=Math.round((eur*chang)*100)/100; afficher(); } function format(valeur,decimal,separateur) { var deci=Math.round( Math.pow(10,decimal)*(Math.abs(valeur)-Math.floor(Math.abs(valeur)))); var val=Math.floor(Math.abs(valeur)); if ((decimal==0)||(deci==Math.pow(10,decimal))) {val=Math.floor(Math.abs(valeur)); deci=0;} var val_format=val+""; var nb=val_format.length; for (var i=1;i<4;i++) { if (val>=Math.pow(10,(3*i))) { val_format=val_format.substring(0,nb-(3*i))+" "+val_format.substring(nb-(3*i)); } } if (decimal>0) { var decim=""; for (var j=0;j<(decimal-deci.toString().length);j++) {decim+="0";} deci=decim+deci.toString(); val_format=val_format+"."+deci; } if (parseFloat(valeur)<0) {val_format="-"+val_format;} return val_format; } function afficher() { var valE=document.forms[0].elements["EURO"].value; var valD=document.forms[0].elements["DOLLAR"].value; var deci="2"; document.forms[0].elements["EURO"].value=format(valE,deci," ".value); document.forms[0].elements["DOLLAR"].value=format(valD,deci," ".value); <!-- J'ai chopé cette fonction sur http://www.toutjavascript.com --> } </SCRIPT> <STYLE type="text/css"> .champ { text-align: right; width: 145px; } </STYLE> <BODY> <FORM name="formulaire" onsubmit="return calculer()"> <INPUT name="EURO" type="text" id="eur" value="0" class="champ"> EURO<BR /> <INPUT name="CHANGE" type="text" id="chang" value="0" class="champ"> CHANGE<BR /> <INPUT name="DOLLAR" type="text" id="dol" value="0" class="champ" readonly> DOLLAR<BR /> <INPUT type="submit" value="Convertir"> </FORM> </BODY> </HTML> Tapez un chiffre >1000 dans le champ "EURO" et un taux, cliquez sur "Convertir" puis essayez de changer le taux et recliquez sur "Convertir". -------------------- G4 MDD Bi 1.25 Ghz (bruyant... euh, TRÈS bruyant !) 1Go / 10.4.11
G3 beige 266 Ghz 352Mo OS 9.2.1 |
|
|
6 Aug 2008, 22:21
Message
#2
|
|
Macbidouilleur de bronze ! Groupe : Membres Messages : 337 Inscrit : 26 Aug 2005 Membre no 44 536 |
Voilà :
CODE <HTML> <script LANGUAGE="JAVASCRIPT"> function calculer() { var eur = parseFloat(supprEspace(document.getElementById('eur').value.replace(/,/,"."))); var chang = parseFloat(supprEspace(document.getElementById('chang').value.replace(/,/,"."))); var dol = Math.round((eur*chang)*100)/100; document.getElementById('eur').value = format(eur,2," "); document.getElementById('chang').value = format(chang,2," "); document.getElementById('dol').value = format(dol,2," "); return false; } function format(valeur,decimal,separateur) { var deci=Math.round( Math.pow(10,decimal)*(Math.abs(valeur)-Math.floor(Math.abs(valeur)))); var val=Math.floor(Math.abs(valeur)); if ((decimal==0)||(deci==Math.pow(10,decimal))) {val=Math.floor(Math.abs(valeur)); deci=0;} var val_format=val+""; var nb=val_format.length; for (var i=1;i<4;i++) { if (val>=Math.pow(10,(3*i))) { val_format=val_format.substring(0,nb-(3*i))+" "+val_format.substring(nb-(3*i)); } } if (decimal>0) { var decim=""; for (var j=0;j<(decimal-deci.toString().length);j++) {decim+="0";} deci=decim+deci.toString(); val_format=val_format+"."+deci; } if (parseFloat(valeur)<0) {val_format="-"+val_format;} return val_format; } function supprEspace(f) { var txtResultat=""; for (var i=0; i<=f.length-1; i++) { if (f.charAt(i)!=" ") { txtResultat+=f.charAt(i); } } return txtResultat; } </SCRIPT> <STYLE type="text/css"> .champ { text-align: right; width: 145px; } </STYLE> <BODY> <FORM name="formulaire" onsubmit="return calculer()"> <INPUT name="EURO" type="text" id="eur" value="0" class="champ"> EURO<BR /> <INPUT name="CHANGE" type="text" id="chang" value="0" class="champ"> CHANGE<BR /> <INPUT name="DOLLAR" type="text" id="dol" value="0" class="champ" readonly> DOLLAR<BR /> <INPUT type="submit" value="Convertir"> </FORM> </BODY> </HTML> Par ailleurs, il y avait quelques problèmes avec tes fonctions d'origines. |
|
|
7 Aug 2008, 08:22
Message
#3
|
|
Adepte de Macbidouille Groupe : Membres Messages : 68 Inscrit : 4 May 2003 Membre no 7 406 |
Tu ne peux pas savoir combien tu m'aides 'andre6006' ! Mille mercis
-------------------- G4 MDD Bi 1.25 Ghz (bruyant... euh, TRÈS bruyant !) 1Go / 10.4.11
G3 beige 266 Ghz 352Mo OS 9.2.1 |
|
|
Nous sommes le : 24th April 2024 - 08:43 |