Avatar billede aso Nybegynder
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>
Avatar billede nikolajdu Nybegynder
21. juni 2001 - 10:24 #1
if (document.form1.x1.value==\"NaN\"){
Så gør dog noget ved det
}else{
Så kører vi bare derudaf
}
Avatar billede aso Nybegynder
21. juni 2001 - 10:37 #2
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
Avatar billede jakoba Nybegynder
21. juni 2001 - 10:56 #3
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 :)
Avatar billede aso Nybegynder
21. juni 2001 - 11:08 #4
kan ikke bruge onfocus=\"this.blur()\" i dette tilfælde. Brugeren skal kunne ændre i felterne.

Men ellers tak :)
Avatar billede nikolajdu Nybegynder
21. juni 2001 - 11:12 #5
Dit script regner nu også forkert hvis man ikke sletter 0.
Avatar billede aso Nybegynder
21. juni 2001 - 11:25 #6
?? 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...
Avatar billede nikolajdu Nybegynder
21. juni 2001 - 11:28 #7
Prøv at skrive F.eks 0123
Avatar billede aso Nybegynder
21. juni 2001 - 11:37 #8
Ups, det havde jeg ikke prøvet.
Kan du hjælpe mig med både NaN problemet og \"0\"123
problemet
Avatar billede ldanielsen Nybegynder
21. juni 2001 - 14:21 #9
<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>
Avatar billede the_nest Nybegynder
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.
Avatar billede ldanielsen Nybegynder
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.

Avatar billede aso Nybegynder
22. juni 2001 - 11:18 #12
Tak til Idanielsen

Aso :)
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview
Kategori
Vi tilbyder markedets bedste kurser inden for webudvikling

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester