OVH Cloud OVH Cloud

SOS Math javascript.

4 réponses
Avatar
RPnich
Bonjour,
Je suis nouveau sur ce groupe, et en panne !
J'ai sur mes sites ci-dessous des pages de calculs en ligne de Taux effectif
global et qui, jusqu'à présent, ne m'avaient pas posé problème(s).
Or, tout à fait par hasard, j'ai découvert un cas de valeurs pour lesquelles
le logiciel donne comme résultat "undefined". J'ai revu mon code source,
décortiqué et scindé au maxi les formules, rien n'y fait.
Bien entendu, en cherchant, j'ai trouvé d'autres valeurs me donnant même
affichage.
Si le coeur vous en dit, regardez à:
http://perso.wanadoo.fr/peynichout.rene/ess_teg/etud14.htm
et dites moi s'il s'agit d'une erreur de programmation, d'une défaillance de
calcul mathématique de Javascript, les deux éventuellement, et dans la
mesure du possible, la parade à telle situation.

Par avance, merci.

--
--
R. Peynichout
www.peynichout.com
www.chez.com/rpenich

4 réponses

Avatar
ASM

Bonjour,
Je suis nouveau sur ce groupe, et en panne !
J'ai sur mes sites ci-dessous des pages de calculs en ligne de Taux effectif
global et qui, jusqu'à présent, ne m'avaient pas posé problème(s).
Or, tout à fait par hasard, j'ai découvert un cas de valeurs pour lesquelles
le logiciel donne comme résultat "undefined".


Ha Ha Ha ! bienvenue au club des calculs couaquesques du JS ;-))

C'est encore un coup d'1 string qui bien sûr ne peut être calculé
puisque pas un nombre

Si tu te sers d'une valeur entrée dans un champ
(par le visiteur ou le JS) cette valeur est du type texte (string) par défaut
il faut donc la convertir en nombre avant de s'en servir dans les calculs.

ça se fait en multipliant par ce que tu veux

TotalTTC = document.monForm.TotalHT.value*1;
TotalTTC = Math.round(TotalTTC * 119.6)/100;

ou direct dans ce cas :
TotalTTC = Math.round(document.monForm.TotalHT.value * 119.6)/100;

Si le coeur vous en dit, regardez à:
http://perso.wanadoo.fr/peynichout.rene/ess_teg/etud14.htm


Ha! oui !
je prends une formation bancaire de six mois et je te dis ;-))

Bon !
y a déjà çà :

xch=document.form1.nbblocs.value;
z= eval(xch);

donc .. tu avais relevé le pb .

z = document.form1.nbblocs.value*1;

corriger les autres

f = document.form1.freq.value*1;

ainsi que :

xch="";
QQ[0]="";
xch=document.form1.Quant0.value;
QQ[0]= eval(xch);

qui donne en 1 fois:

QQ[0] = document.form1.Quant0.value*1;


Cependant je crains que çà ne résolve ton pb
avec tous ces Math.qquechose
quand on sait que les processeurs ne comptent pas en base 10
à force, ou de tps en tps, y a des couacs.

Essayer de faire faire les sous-calculs en hexa
et ne convertir qu'à la fin ?

truc = Math.qquechose(machin*bidule,16);

truc = Math.round(truc,10);

(perso : rien essayé de cette approche)

outre la complexité apparente de ce que tu veux faire
il y a pas mal de délayages
qui doivent contribuer à l'attente du résultat


Vu çà :

Math.Pow(eval1+l,-QQ[w])/L)* Math.Pow(eval(1+L), ...etc

y aurait pas 1 p'tite erreur ?

Math.Pow(eval(1+l),-QQ[w])/L)* Math.Pow(eval(1+L), ...etc

ou :

Math.Pow((1+l*1),-QQ[w])/L)* Math.Pow((1+L*1), ...etc

pour moins fatiguer avec les évaluations qui freinent


--
*******************************************************
Stéphane MORIAUX et son vieux Mac
Aide Pages Perso (images & couleurs, formulaire, CHP)
http://perso.wanadoo.fr/stephane.moriaux/internet/
*******************************************************

Avatar
ASM

[couic]


kesako ?

// mise à nul des variables de saisie

w=0;
f=0;
for (ict=0; ict<100; ict++)
{ //b1
AA[ict]="";
QQ[ict]="";
} //fb1


pourquoi pas (et immédiat) :

// mise à nul des variables de saisie

w=0;
f=0;
AA = new Array(100);
QQ = new Array(100);



--
*******************************************************
Stéphane MORIAUX et son vieux Mac
Aide Pages Perso (images & couleurs, formulaire, CHP)
http://perso.wanadoo.fr/stephane.moriaux/internet/
*******************************************************

Avatar
RPnich
Bonjour !

ASM a 'clavigraphié':


[couic]


kesako ?

// mise à nul des variables de saisie

w=0;
f=0;
for (ict=0; ict<100; ict++)
{ //b1
AA[ict]="";
QQ[ict]="";
} //fb1


pourquoi pas (et immédiat) :

// mise à nul des variables de saisie

w=0;
f=0;
AA = new Array(100);
QQ = new Array(100);


Avant d'entrer dans le vif du sujet, d'abord merci pour une réponse aussi
rapide. Très bonne occupation pour ces journées de froidure....

--
--
R. Peynichout
www.peynichout.com
www.chez.com/rpenich


Avatar
BMR
Il y a aussi des problèmes d'arrondi inhérents au navigateur.
Par exemple sur Firefox :
var n = 158.545;
var p = Math.round(n*100) / 100; donnera 158.54 au lieu de 158.55
var q = n.toFixed(2); même résultat

J'ai signalé la chose, mais apparemment il n'y a rien à faire... C'est
bien ennuyeux quand même.

BMR

Bonjour,
Je suis nouveau sur ce groupe, et en panne !
J'ai sur mes sites ci-dessous des pages de calculs en ligne de Taux effectif
global et qui, jusqu'à présent, ne m'avaient pas posé problème(s).
Or, tout à fait par hasard, j'ai découvert un cas de valeurs pour lesquelles
le logiciel donne comme résultat "undefined". J'ai revu mon code source,
décortiqué et scindé au maxi les formules, rien n'y fait.
Bien entendu, en cherchant, j'ai trouvé d'autres valeurs me donnant même
affichage.
Si le coeur vous en dit, regardez à:
http://perso.wanadoo.fr/peynichout.rene/ess_teg/etud14.htm
et dites moi s'il s'agit d'une erreur de programmation, d'une défaillance de
calcul mathématique de Javascript, les deux éventuellement, et dans la
mesure du possible, la parade à telle situation.

Par avance, merci.