IPB

Bienvenue invité ( Connexion | Inscription )

 
Reply to this topicStart new topic
> JS séparateur des milliers, Comment le faire ignorer dans le calcul ?
Options
nekk
posté 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 sad.gif
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 sad.gif
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
Go to the top of the page
 
+Quote Post
andre6006
posté 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.
Go to the top of the page
 
+Quote Post
nekk
posté 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 smile.gif


--------------------
G4 MDD Bi 1.25 Ghz (bruyant... euh, TRÈS bruyant !) 1Go / 10.4.11
G3 beige 266 Ghz 352Mo OS 9.2.1
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 utilisateur(s) sur ce sujet (1 invité(s) et 0 utilisateur(s) anonyme(s))
0 membre(s) :

 



Nous sommes le : 24th April 2024 - 08:43