Math.min pour récupérer la plus petite valeur dans des champs d'un formula

Petit nouveau ! | 3 Messages

26 oct. 2008, 18:38

Bonjour,

J’utilise Math.min pour récupérer la plus petite valeur dans des champs d’un formulaire.

Le code :

Code : Tout sélectionner

if ((tota6.value > 0)&&(tota6.value < 12)){ OFFERT.value = 0 ; } if ((tota6.value > 11)&&(tota6.value < 24)){ var OOFFERT = Math.min(pu1.value, pu2.value, pu3.value) ; OFFERT.value = OOFFERT ; } else { OFFERT.value = 0 ; }

La valeur OFFERT doit être à 0 tant que tota6 est inférieur à 11.
Quand la valeur tota6 dépasse 11 la valeur de OFFERT devient la plus petite des 3 valeurs de pu1 pu2 et pu3 ; cela fonctionne.

Mon problème c’est que si par exemple la valeur de pu1 est supérieure à 11 et que pu2 et pu3 ne sont pas rempli, la valeur de OFFERT reste à 0, cela ne fonctionne que quand les 3 valeurs sont rempli.
Je voudrais qu’il récupère la valeur de total6 à partir du moment ou une des valeurs pu1 pu2 et pu3 ou la somme de pu1 + pu2, pu2 + pu3 et pu1+ pu3 dépasse 11.

Merci d’avance,

Cireultra
Modifié en dernier par cireultra le 27 oct. 2008, 12:41, modifié 2 fois.

ViPHP
ViPHP | 4039 Messages

27 oct. 2008, 11:10

Déjà, ton code est mal construit. Le résultat de ton premier if est le même que le dernier else, et tu finis par réaffecter deux fois la valeur de OFFERT.

Et je ne vois pas pourquoi tu calcules OOFFERT dans le premier, tu ne l'utilises pas.

Dans ton cas, je verrais ceci:

Code : Tout sélectionner

var bazar = []; if (parseInt(pu1) >0) bazar.push(pu1); if (parseInt(pu2) >0) bazar.push(pu2); if (parseInt(pu3) >0) bazar.push(pu3); if ( (tota6.value > 11) && (tota6.value < 24) ) { OFFERT.value = Math.min.apply(Math,bazar); }
Mais dans ta dernière phrase, tu ne t'exprimes pas très clairement.
Mais qu'importe. (je suis ici - dernier petit projet)
Berze going social.

Petit nouveau ! | 3 Messages

27 oct. 2008, 11:48

Merci pour ta réponse.

Je débute en prog.

Effectivement la ligne var OOFFERT = Math.min(pu1.value, pu2.value, pu3.value) ; dans le premier ne sert à rien (supprimer).

Je veux que OFFERT soit rempli quand tota6 > 11 même si les 3 valeurs (pu1,pu2 et pu3) ne sont pas toutes remplies.

Exemple: pu1=5.10(prix) x 6(nombre) pu2=3.50(prix) x 6(nombre) pu3= champ vide
donc --> tota6=12(6+6) la valeur de OFFERT=3.50(pu2->le plus petit)

C'est plus clair (pas sur !)

Je teste ton code.

Avec ton code : OFFERT se rempli quand tota6 > 11 mais pas avec une valeur mais avec "Infinity" ?

J'ai testé aussi ça.

Code : Tout sélectionner

if ((tota6.value > 11)&&(tota6.value < 24)){ var OOFFERT = Math.min((pu1.value)||(pu2.value)||(pu3.value)) ; OFFERT.value = OOFFERT ; } else { OFFERT.value = 0 ; }
Ca fonctionne sans remplir les trois champs (pu1,pu2,pu3) mais OFFERT prend toujours la valeur de pu1.


A +

Cireultra

ViPHP
ViPHP | 4039 Messages

27 oct. 2008, 13:00

Ah, tu n'utilises pas que des entiers, alors il faut utiliser des "floats" plutôt que des "integer".

Code : Tout sélectionner

var bazar[]; if (parseFloat(pu1) >=0) bazar.push(parseFloat(pu1)); // Si pu1 contient un chiffre, ajoute-le au tableau 'bazar' if (parseFloat(pu2) >=0) bazar.push(parseFloat(pu2)); // idem if (parseFloat(pu3) >=0) bazar.push(parseFloat(pu3)); // idem if ( (tota6.value > 11) && (tota6.value < 24) ) { OFFERT.value = Math.min.apply(Math,bazar); // retourne la valeur minimale du tableau bazar. }
Ton exemple avec le 6 et tout le toutim, c'est bizarre. Je n'y vois pas de logique. D'ou sort ce 6 ? S'il est juste à multiplier par le nombre de 'pu', il suffit de vérifier si la longueur du tableau 'bazar' multiplié par 6 est supérieur à 12. De ce style:

Code : Tout sélectionner

var test = bazar.length * 6; if ( (test > 11) && (test < 24) ) { OFFERT.value = Math.min.apply(Math,bazar); }
Mais qu'importe. (je suis ici - dernier petit projet)
Berze going social.

Petit nouveau ! | 3 Messages

27 oct. 2008, 13:56

RE Merci Berzemus


A+

Cireultra