Précédent   Forum des professionnels en informatique > Webmasters - Développement Web > JavaScript
JavaScript Forum programmation JavaScript. Lire : Cours JavaScript, FAQ JavaScript, Toutes les FAQ JavaScript et Sources JavaScript
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 09/08/2011, 13h09   #1
Invité de passage
 
Homme
Technicien maintenance
Inscription : août 2011
Messages : 2
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Technicien maintenance
Secteur : High Tech - Matériel informatique

Informations forums :
Inscription : août 2011
Messages : 2
Points : 0
Points : 0
Par défaut calcul avec javascript

Bonjour
Voila je développe des petites applications en PHP en essayant d'éviter le javascript car mes connaissances sont plus que limiter sur ce domaine, mais la j'ai pas le choix, je suis obligé d'insérer un script mais ne fonctionne pas a 100%, j'ai une erreur par moment sur le résultat et le nombre de chiffres après la virgule que je n'arrive pas a limiter a 2
J'ai testé plusieurs scripts mais aucun succès, celui la est celui qui fonctionne le mieux pour mon besoin

C'est pour un choix de paiement, une variable en PHP est récupérer via un POST, ensuite, il y a 3 champs a remplir pour le paiement cb, especes et cheque et une différence a payer ou rembourser

exemple, la variable en PHP 594,65 ( montant a regler )
Test 1 => champs cb 200 le champs différence indique 394.65 => OK
Test 2 => champs especes 600 => reste -5.350000000000023 => Pas bon trop de chiffres apres la virgule

2 eme exemple, probleme de resultat
La variable en php 35.88
champs espece 35.90 et le champs difference -0.01999999999999602 => Pas bon, il devrait mettre 0.02

Voici le code

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<script language="JavaScript" type="text/javascript">
function calcul(formulaire) // script de calcul
    {
        var pu = formulaire.prix.value; 
        var cb = formulaire.cb.value;   
        var esp = formulaire.esp.value;   
        var ch = formulaire.ch.value;   
        var tot=pu-cb-esp-ch;
        formulaire.total.value = tot ;
        calculTotal();
    }
function calculTotal(){
  total.somme.value = 0;
  for(var i=0;i<document.forms.length-1;i++){ 
    total.somme.value = parseFloat(total.somme.value) + parseFloat(document.forms[i ].total.value);
  }
}
</script>
<form name="paiement">
<input  name='prix' type='hidden' value='<?php echo $vente_montant; ?>' onclick='calcul(paiement)'>
<table>
<tr><td><img src="paye_cb.png"></td><td><img src="paye_espece.png"></td><td><img src="paye_cheque.jpg"></td><td>Reste</td></tr>
<tr>
<td><input type='text' name='cb' size='4'   onChange='calcul(paiement)'></td>
<td><input type='text' name='esp' size='4'   onChange='calcul(paiement)'></td>
<td><input type='text' name='ch' size='4'   onChange='calcul(paiement)'></td>
<td><input type='text' size='4' name='total' ></td>
</tr>
</table>
</form>
Je n'arrive pas a trouver le soucis, si quelqu'un a 2 minutes pour y jeter un oeil

Merci
Didier
didierdu84 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/08/2011, 13h23   #2
Membre Expert
 
Avatar de Watilin
 
Homme Matilin Torre
Étudiant
Inscription : juin 2010
Messages : 679
Détails du profil
Informations personnelles :
Nom : Homme Matilin Torre
Âge : 23
Localisation : France, Ille et Vilaine (Bretagne)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juin 2010
Messages : 679
Points : 1 202
Points : 1 202
Salut,
c'est un problème lié à la représentation des nombres à virgule flottante. Tu aurais le même problème en PHP, et avec n'importe quel langage qui utilise la virgule flottante.

Si tu as besoin d'une grande précision (et je pense que c'est le cas), fais tes calculs en PHP avec l'extension BCMath. Tu peux utiliser JavaScript pour donner à l'utilisateur un aperçu de ce qui sera fait, en ajoutant une note explicative pour lui indiquer que ce ne sont pas les vrais résultats.

Il est possible de trouver des bibliothèques de calcul de précision pour JavaScript, mais ce n'est pas une bonne idée : faire les traitements côté client n'est jamais sûr.
__________________
Disposition de clavier ergonomique française : Bépo
Watilin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/08/2011, 09h27   #3
Membre éclairé
 
Homme
F5(){F5}
Inscription : avril 2008
Messages : 256
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Rhône (Rhône Alpes)

Informations professionnelles :
Activité : F5(){F5}
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : avril 2008
Messages : 256
Points : 320
Points : 320
salut,

tu peux aussi :
  • limiter la saisie à deux chiffres après la virgule (tu as dit toi même que tu voulais que deux chiffres)... et multiplier par 100 la valeur de tes champs

    De fait, tu manipules des entiers, ca devrait mieux se comporter. et à la fin tu divises ton total par 100.
  • updater le résultat par requête ajax ou tu fais le calcul de simulation coté serveur.
galerien69 est déconnecté   Envoyer un message privé Réponse avec citation 10
Vieux 10/08/2011, 10h26   #4
Invité de passage
 
Homme
Technicien maintenance
Inscription : août 2011
Messages : 2
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Vaucluse (Provence Alpes Côte d'Azur)

Informations professionnelles :
Activité : Technicien maintenance
Secteur : High Tech - Matériel informatique

Informations forums :
Inscription : août 2011
Messages : 2
Points : 0
Points : 0
Merci pour vos conseils, je vais essayer de voir ca
didierdu84 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 10/08/2011, 13h08   #5
Membre Expert
 
Avatar de Watilin
 
Homme Matilin Torre
Étudiant
Inscription : juin 2010
Messages : 679
Détails du profil
Informations personnelles :
Nom : Homme Matilin Torre
Âge : 23
Localisation : France, Ille et Vilaine (Bretagne)

Informations professionnelles :
Activité : Étudiant

Informations forums :
Inscription : juin 2010
Messages : 679
Points : 1 202
Points : 1 202
C'est très juste, j'avais oublié. La convention avec les sites marchands, c'est d'enregistrer les prix en unités basses (centimes).
__________________
Disposition de clavier ergonomique française : Bépo
Watilin est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/08/2011, 09h37   #6
Rédacteur
 
Avatar de jreaux62
 
Homme Jérôme Réaux
Webdesigner
Inscription : août 2008
Messages : 2 993
Détails du profil
Informations personnelles :
Nom : Homme Jérôme Réaux
Âge : 45
Localisation : France, Pas de Calais (Nord Pas de Calais)

Informations professionnelles :
Activité : Webdesigner
Secteur : Arts - Culture

Informations forums :
Inscription : août 2008
Messages : 2 993
Points : 5 786
Points : 5 786
Envoyer un message via Skype™ à jreaux62
Bonjour,
petite fonction javascript (ici)
ou juste :
toFixed() qui , contrairement à ce que j'avais lu, ne tronque pas, mais arrondi bien ...
12.05499 -> 12.05
12.055 -> 12.05
12.05501 -> 12.06
__________________
"Ce qui se conçoit bien s'énonce clairement - Et les mots pour le dire arrivent aisément."
Nicolas Boileau-Despréaux, Homme de lettres français (1636-1711), principal théoricien de l'esthétique classique.
Site perso Mes tutos DVP : Gestion-Affichage de Nouvelles - Affichage en tableau HTML - Fonctions de redimensionnement d'images
jreaux62 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 11/08/2011, 14h28   #7
Membre Expert
 
Avatar de Willpower
 
Homme Boris Dessy
sans emploi
Inscription : décembre 2010
Messages : 867
Détails du profil
Informations personnelles :
Nom : Homme Boris Dessy
Localisation : Belgique

Informations professionnelles :
Activité : sans emploi

Informations forums :
Inscription : décembre 2010
Messages : 867
Points : 1 374
Points : 1 374
Je te recommande un de mes vieux poste : http://www.developpez.net/forums/d10...t/#post5879980
Willpower est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 08h12.


 
 
 
 
Partenaires

Hébergement Web