Résultats sur des calculs me donne des NaN

Résolu
JLuc69 -  
Popoï_ Messages postés 171 Date d'inscription   Statut Membre Dernière intervention   -
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 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
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
JLuc69
 
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 16761 Date d'inscription   Statut Modérateur Dernière intervention   3 020
 
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
JLuc69
 
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   Statut Membre Dernière intervention   76
 
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
JLuc69
 
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   Statut Membre Dernière intervention   76
 
Je viens de regarder et il faut écrire Math.PI
Fais comme tu veux....
0