Résultats sur des calculs me donne des NaN

Résolu/Fermé
JLuc69 - Modifié par JLuc69 le 24/06/2011 à 21:43
Popoï_ Messages postés 171 Date d'inscription mardi 21 juin 2011 Statut Membre Dernière intervention 8 mars 2019 - 25 juin 2011 à 12:23
Bonjour,

Je n'arrive pas à faire des calculs en javascript !
Le premier alert est bon, mais le reste me renvoie des NaN :(

Mon code :

function checkmat()
{
var diametrepercage = document.form1.dia_tr.value - document.form1.dia_fr.value - (2 * document.form1.surep.value);
alert(diametrepercage);
var circonference = parseFloat(diametrepercage)*Math.pi;
alert(circonference);
var nombredetrous = Math.floor(parseFloat(circonference)/document.form1.dia_fr.value);
alert(nombredetrous);
document.form1.nbtrous.value = nombredetrous;
var angle = (360/nombredetrous)/2;
alert(angle);
var matiere = ((Math.round((diametrepercage/2)*Math.sin(angle*Math.pi/180)*1000)/1000)*2)-document.form1.dia_fr.value;
document.form1.mat.value = matiere;
alert(nombredetrous);
alert(matiere);
}

Un bout de mon formulaire :

<input type="text" id="dia_fr" name="dia_fr" title="Diamètre de l'outil, ne peut être égal à zéro ou négatif." size="10" value="<?php if(isset($_POST['dia_fr'])) echo $dia_fr; else echo 3; ?>" onchange="checkmat()" /> <label style="display:block; width:200px; float:left;">Diamètre du foret</label><?php if(isset($erreur['dia_fr'])) echo "<span style='color:red;float:right;'>" . $erreur['dia_fr'] . '</span>'; ?><br />
<input type="text" id="dia_tr" name="dia_tr" title="Diamètre du trou à réaliser." size="10" value="<?php if(isset($_POST['dia_tr'])) echo $dia_tr; else echo 50; ?>" onchange="checkmat()" /> <label style="display:block; width:200px; float:left;">Diamètre à réaliser</label><?php if(isset($erreur['dia_tr'])) echo "<span style='color:red;float:right;'>" . $erreur['dia_tr'] . '</span>'; ?><br />
<input type="text" id="surep" name="surep" title="suépaisseur à laisser entre le diamètre à faire et le diamètre du trou." size="10" value="<?php if(isset($_POST['surep'])) echo $surep; else echo 0.2; ?>" onchange="checkmat()" /> <label style="display:block; width:200px; float:left;">Surépaisseur</label><?php if(isset($erreur['surep'])) echo "<span style='color:red;float:right;'>" . $erreur['surep'] . '</span>'; ?><br />
<input type="text" id="mat" name="mat" disabled="disabled" size="10" value="<?php if(isset($_POST['mat'])) echo $mat; else echo 0.251; ?>"/> <label style="display:block; width:200px; float:left;">Minimum matière</label><br />
<input type="text" id="nbtrous" name="nbtrous" disabled="disabled" size="10" "/> <label style="display:block; width:200px; float:left;">Nombre de trous</label><br />


D'où cela peut il provenir ?
Merci d'avance à toutes les bonnes volonté

4 réponses

KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
Modifié par KX le 24/06/2011 à 21:59
Cela vient de tes parseFloat, si 'diametrePercage' et 'circonference' ne sont pas des chaines de caractères représentant un float valide alors parseFloat te renverra NaN ("Not a Number")
La confiance n'exclut pas le contrôle
0
Je les ai tous enlever, et à part le premier alert() qui me renvoie une valeur, tous les autres me renvoie "NaN".
Je comprend pas ce qui se passe !
Est ce à cause des fonctions Math ?
0
KX Messages postés 16734 Date d'inscription samedi 31 mai 2008 Statut Modérateur Dernière intervention 24 avril 2024 3 015
24 juin 2011 à 22:19
Bon j'avoue que je connais pas trop JavaScript...
J'essaierai déjà de respecter la casse avec Math.PI mais sinon tu écris parseFloat(diametrePercage), je vois pas pourquoi ça marcherait, déjà je pense que ce serait plutôt diametrePercage.parseFloat qu'il faut écrire, mais en fait diametrePercage c'est le résultat du calcul précédent donc ce n'est pas une chaine de caractères mais un nombre !
0
Ca y est, c'est effectivement Math.pi et lui seul qui met le boxon.
J'ai remplacé Math.pi par la valeur 3.1415926535897932384626433832795 et tout marche.
Par contre, je ne sais pas pourquoi cette fonction déconne :/
Merci tout de même
0
Popoï_ Messages postés 171 Date d'inscription mardi 21 juin 2011 Statut Membre Dernière intervention 8 mars 2019 75
Modifié par Popoï_ le 24/06/2011 à 22:35
Le javascript est sensible à la casse ( pour lui a minuscule est différent du A majuscule).
Peut-être que pi doit être écrit PI, ou Pi... c'est probablement ce qui fait bugger ton script.
0
J'ai vu qu'il fallait écrire : Math.Pi
J'ai testé, mais les erreurs sont quand même là :/
Donc je laisse la valeur en dur au lieu d'utiliser la fonction
0
Popoï_ Messages postés 171 Date d'inscription mardi 21 juin 2011 Statut Membre Dernière intervention 8 mars 2019 75
25 juin 2011 à 12:23
Je viens de regarder et il faut écrire Math.PI
Fais comme tu veux....
0