2017-02-07 1 views
0

Ich habe eine einfache kleine Quadratwurzel Rechner innerhalb JavaScript entwickelt, mit einer for Schleife.für Schleifeninkrement mit Dezimalstopp bei 1,42 statt fortfahren, bis die Berechnung abgeschlossen ist

Allerdings bemerkte ich bei der Ausgabe jedes Wertes für i jedes Mal, wenn die Schleife iteriert (mit console.log(i).toFixed(2)), würde die Zählung bei 1.42 jedes Mal stoppen. Hier

ist die JavaScript:

// inp is the input in which the user types the number they would like to find the square root of 
for(var i = 0; i < inp.value; i += 0.01){ 
    var check = i * i; 
    check = check.toFixed(2); // fix decimal to a tenth 

    console.log(i.toFixed(2)); // output value to console 

    if(check == inp.value){ // if i * i is equal to user input 
     alert(i); // alert the square root 
     break; // break out of for loop 
    } else if(check > inp.value){ // if the value is more than user input 
     alert("Value could not be found."); // alert value could not be found 
     break; // break out of for loop 
    } 
} 

Alle Hilfe ist willkommen,
Dank.

EDIT: Ich habe bemerkt, dass, wenn ich 1 eingeben, wird es ausgegeben, bis 0.99, als 1.42

EDIT No 2 zu Gegensatz: Ich Ibrahims aus neuer Antwort getestet, und es Semi-Art gearbeitet. Es stoppt jetzt bei 3.17 statt 1.42. Allerdings bemerkte ich, dass nach dem Test meine Laptop-Fans mit Vollgas zu drehen begannen und meine CPU-Last für eine kurze Sekunde auf 100% anstieg, bevor sie sich auf etwa 40% verlangsamte. Wäre es vielleicht die Tatsache, dass der Laptop nicht mit der konsistenten For-Schleife umgehen kann? Wenn ja, was wäre eine bessere Alternative dazu? Dank

Fiddle: https://jsfiddle.net/pk7or60f/

+1

Was ist der Wert für den Eingangswert? –

+0

@FanyoSILIADIN, was auch immer der Benutzer eingibt. –

+0

was auch immer der Benutzer Eingaben Sie bei 1,42 stoppen? –

Antwort

1

Ich hatte Zweifel darüber, aber es war der Fehler die ganze Zeit. .toFixed gibt eine Zeichenfolge (das ist mir bekannt), inp.value ist eine Zeichenfolge (das ist mir auch bekannt). Aber ich dachte, dass seit > nur mit Zahlen arbeiten, dass der Interpreter ihre Werte als Zahlen verwenden und den richtigen Vergleich machen wird. Aber ich habe mich geirrt. So um die interpretter zu zwingen sie als Zahl zu sehen, verwenden Sie die explizite Weise mit Number oder parseFloat wie folgt aus:

else if(Number(check) > Number(inp.value)){ 
    alert("Value could not be found."); 
    break; 
} 

oder die implizite Weise die unary + wie folgt aus:

else if(+check > +inp.value){ 
    alert("Value could not be found."); 
    break; 
} 

Das Gleiche gilt für die Überprüfung der Gleichheit.

+0

Ich werde es versuchen! Danke für die Antwort –

+0

Hallo, ich versuche es jetzt, es ist halb-behoben mein Problem darin, dass jetzt bei '3.17', statt' 1.42' –

+0

@GROVER stoppt. bei irgendeinem gegebenen Input! –

Verwandte Themen