21. juni 2001 - 10:19
Der er
11 kommentarer og 1 løsning
NaN i udregning
Hvordan undgår jeg NaN i en udregning? jeg har defineret value=\"0\" i inputfelterne, men hvis brugeren deleter \"0\" så der står et blankt felt bliver resultatet NaN. <HTML> <HEAD><TITLE></TITLE> <SCRIPT> function calculate(sum) { document.form1.elements[sum].value = parseInt(document.form1.x1.value) + parseInt(document.form1.x2.value) + parseInt(document.form1.x3.value) } </SCRIPT> </HEAD><BODY BGCOLOR=\"#ffffff\" onload=\"calculate\" > <form name=\"form1\" action=\"\" method=\"post\"> <input type=\"text\" name=\"x1\" size=\"8\" class=\"box\" value=\"0\"> + <input type=\"text\" name=\"x2\" size=\"8\" class=\"box\" value=\"0\"> + <input type=\"text\" name=\"x3\" size=\"8\" class=\"box\" value=\"0\"> = <input type=\"text\" name=\"sum\" size=\"8\" class=\"box\"> <input type=\"button\" value=\"Beregn\" onClick=\"calculate(\'sum\')\" name=\"button\" class=\"box2\"> </form></BODY></HTML>
Annonceindlæg fra SoftwareOne
if (document.form1.x1.value==\"NaN\"){ Så gør dog noget ved det }else{ Så kører vi bare derudaf }
ok du har fat i en begynder if (document.form1.x1.value==\"NaN\"){ Så gør dog noget ved det -- hvad?? }else{ Så kører vi bare derudaf -- Hvor?? } Jeg må have lidt mere hjælp
Du kunne evt forhindre brugeren i at pille ved dine inputfelter. <input type=\"text\" name=\"x1\" size=\"8\" class=\"box\" value=\"0\" onfocus=\"this.blur()\"> men det er måske lidt drastisk :)
kan ikke bruge onfocus=\"this.blur()\" i dette tilfælde. Brugeren skal kunne ændre i felterne. Men ellers tak :)
Dit script regner nu også forkert hvis man ikke sletter 0.
?? Det fortår jeg ikke. Det køre fint hos mig, bortset fra NaN hvis man sletter 0. Jeg er villig til at afsætte nogle flere point...
Prøv at skrive F.eks 0123
Ups, det havde jeg ikke prøvet. Kan du hjælpe mig med både NaN problemet og \"0\"123 problemet
<HTML> <HEAD> <TITLE></TITLE> <SCRIPT language=JavaScript> function calculate(f){ mySum = 1*(\"0\"+f.x1.value) + 1*(\"0\"+f.x2.value) + 1*(\"0\"+f.x3.value) if (mySum/mySum == 1 || mySum == 0){ f.sum.value = mySum }else{ alert(\"Fejl\") } } </SCRIPT> </HEAD> <BODY BGCOLOR=\"#ffffff\" onLoad=\"calculate(document.form1)\"> <p> <form name=\"form1\"> <input type=\"text\" name=\"x1\" size=\"8\" value=\"0\"> + <input type=\"text\" name=\"x2\" size=\"8\" value=\"0\"> + <input type=\"text\" name=\"x3\" size=\"8\" value=\"0\"> = <input type=\"text\" name=\"sum\" size=\"8\" value=\"\"> <input type=\"button\" value=\"Beregn\" onClick=\"calculate(document.form1)\" name=\"button1\"> </form> </p> </BODY> </HTML>
22. juni 2001 - 00:51
#10
Måske kan dette hjælpe lidt. Hvis man vil hive det først tal ud af en text streng kan man gøre: testString = \"10.5 tønder guld\"; talA = parseInt(testString); talB = parseFloat(testString); talA vil være ligmed 10 og talB vil være ligmed 10.5 Og hvis man vil ungå NaN så lav en linje hvor der står: if (document.form1.x1.value==\"NaN\"){ document.form1.x1.value=0; } og den skal selvføldig så før alt det andet :) Hvis du vil have et script der virker kan jeg godt lave et til dig, så bare skriv.
22. juni 2001 - 01:43
#11
Jeg havde en masse problemer med parseInt, så jeg bruger den nemme løsning: 1*\"0045\" = 45 1*\"00a45\" = NaN Når jeg sætter \"0\" foran hvert felt, så er det ligemeget om det er tomt. Derfor: mySum = 1*(\"0\"+f.x1.value) + 1*(\"0\"+f.x2.value) + 1*(\"0\"+f.x3.value) Derefter laver jeg to check: mySum/mySum = 1 hvis mySum er et tal (dvs uden NaN) Hvis mySum == 0 så er mySum/mySum = NaN (Man kan ikke dividere med 0) men så er det alligevel et tal. Derfor: if (mySum/mySum == 1 || mySum == 0){ f.sum.value = mySum }else{ alert(\"Fejl\") } Er det ikke i orden?? Hilsen Lars PS: Det der med f er bare for at slippe for at skrive document.form1 fire gange.
22. juni 2001 - 11:18
#12
Tak til Idanielsen Aso :)
Vi tilbyder markedets bedste kurser inden for webudvikling