Frage

Wie kann ich eine Zahl in JavaScript abrunden?

math.round() funktioniert nicht, weil sie es auf die nächste Dezimalstelle aufgerundet wird.

Ich bin mir nicht sicher, ob es ein besserer Weg, als es andere tut es außer an der Dezimalstelle Brechen am ersten Bit zu halten. Es muss sein ...

War es hilfreich?

Lösung

Math.floor()

ist die Antwort.

Andere Tipps

Runde auf negative Unendlichkeit - Math.floor()

+3.5 => +3.0
-3.5 => -4.0

Runde gegen Null - in der Regel Truncate() genannt, aber nicht von JavaScript unterstützt - kann mit Math.ceil() für negative Zahlen und Math.floor() für positive Zahlen emuliert wird

.
+3.5 => +3.0 using Math.floor()
-3.5 => -3.0 using Math.ceil()

Math.floor() funktionieren wird, aber es ist sehr langsam im Vergleich zu einem bitweise OR Betrieb mit:

var rounded = 34.923 | 0;
alert( rounded );
//alerts "34"

Bearbeiten Math.floor() ist nicht langsamer als die Verwendung | Operator. Dank Jason S für meine Arbeit zu überprüfen.

Hier ist der Code, den ich zu Test verwendet:

var a = [];
var time = new Date().getTime();
for( i = 0; i < 100000; i++ ) {
    //a.push( Math.random() * 100000  | 0 );
    a.push( Math.floor( Math.random() * 100000 ) );
}
var elapsed = new Date().getTime() - time;
alert( "elapsed time: " + elapsed );

Sie können versuchen, diese Funktion zu nutzen, wenn Sie auf eine bestimmte Anzahl von Dezimalstellen runden müssen nach unten

function roundDown(number, decimals) {
    decimals = decimals || 0;
    return ( Math.floor( number * Math.pow(10, decimals) ) / Math.pow(10, decimals) );
}

Beispiele

alert(roundDown(999.999999)); // 999
alert(roundDown(999.999999, 3)); // 999.999
alert(roundDown(999.999999, -1)); // 990

negative Unendlichkeit abrunden zu verwenden:

rounded=Math.floor(number);

gegen Null abrunden (wenn die Zahl in eine 32-Bit-Ganzzahl zwischen -2147483648 und 2147483647 runden kann), zu verwenden:

rounded=number|0;

auf Null abrunden (für eine beliebige Zahl) verwenden:

if(number>0)rounded=Math.floor(number);else rounded=Math.ceil(number);

ein number Richtung 0 Rundung kann durch Subtraktion seines unterzeichnet Bruchteil number % 1 getan werden:

rounded = number - number % 1;

Wie Math.floor (rundet in Richtung -Infinity) diese Methode vollkommen korrekt ist.

Es gibt Unterschiede in der Handhabung von -0, +Infinity und -Infinity aber:

Math.floor(-0) => -0
-0 - -0 % 1    => +0

Math.floor(Infinity)    => Infinity
Infinity - Infinity % 1 => NaN

Math.floor(-Infinity)     => -Infinity
-Infinity - -Infinity % 1 => NaN
Math.floor(1+7/8)

War das Hantieren Runde mit jemand anderem Code heute und fand die folgenden, die auch Runden nach unten scheint:

var dec = 12.3453465,
int = dec >> 0; // returns 12

Für weitere Informationen über die Sign-ausbreitende Verschiebung nach rechts (>>), finden Sie unter MDN Bitoperatoren

Es dauerte eine Weile, um herauszufinden, was diese taten: D

Aber wie oben hervorgehoben, Math.floor () funktioniert und sieht besser lesbar meiner Meinung nach.

Sie müssen setzen -1 bis rund die Hälfte nach unten und danach mit -1 wie das Beispiel multiplizieren unten unten.

<script type="text/javascript">

  function roundNumber(number, precision, isDown) {
    var factor = Math.pow(10, precision);
    var tempNumber = number * factor;
    var roundedTempNumber = 0;
    if (isDown) {
      tempNumber = -tempNumber;
      roundedTempNumber = Math.round(tempNumber) * -1;
    } else {
      roundedTempNumber = Math.round(tempNumber);
    }
    return roundedTempNumber / factor;
  }
</script>

<div class="col-sm-12">
  <p>Round number 1.25 down: <script>document.write(roundNumber(1.25, 1, true));</script>
  </p>
  <p>Round number 1.25 up: <script>document.write(roundNumber(1.25, 1, false));</script></p>
</div>

Hier ist Math.floor in einem einfachen Beispiel verwendet wird. Dies könnte einen neuen Entwickler helfen, eine Vorstellung zu bekommen, wie es in einer Funktion zu verwenden und was sie tut. Hoffe, es hilft!

<script>

var marks = 0;

function getRandomNumbers(){    //  generate a random number between 1 & 10
    var number = Math.floor((Math.random() * 10) + 1);
    return number;
}

function getNew(){  
/*  
    This function can create a new problem by generating two random numbers. When the page is loading as the first time, this function is executed with the onload event and the onclick event of "new" button.
*/
document.getElementById("ans").focus();
var num1 = getRandomNumbers();
var num2 = getRandomNumbers();
document.getElementById("num1").value = num1;
document.getElementById("num2").value = num2;

document.getElementById("ans").value ="";
document.getElementById("resultBox").style.backgroundColor = "maroon"
document.getElementById("resultBox").innerHTML = "***"

}

function checkAns(){
/*
    After entering the answer, the entered answer will be compared with the correct answer. 
        If the answer is correct, the text of the result box should be "Correct" with a green background and 10 marks should be added to the total marks.
        If the answer is incorrect, the text of the result box should be "Incorrect" with a red background and 3 marks should be deducted from the total.
        The updated total marks should be always displayed at the total marks box.
*/

var num1 = eval(document.getElementById("num1").value);
var num2 = eval(document.getElementById("num2").value);
var answer = eval(document.getElementById("ans").value);

if(answer==(num1+num2)){
    marks = marks + 10;
    document.getElementById("resultBox").innerHTML = "Correct";
    document.getElementById("resultBox").style.backgroundColor = "green";
    document.getElementById("totalMarks").innerHTML= "Total marks : " + marks;

}

else{
    marks = marks - 3;
    document.getElementById("resultBox").innerHTML = "Wrong";
    document.getElementById("resultBox").style.backgroundColor = "red";
    document.getElementById("totalMarks").innerHTML = "Total Marks: " + marks ;
}




}

</script>
</head>

<body onLoad="getNew()">
    <div class="container">
        <h1>Let's add numbers</h1>
        <div class="sum">
            <input id="num1" type="text" readonly> + <input id="num2" type="text" readonly>
        </div>
        <h2>Enter the answer below and click 'Check'</h2>
        <div class="answer">
            <input id="ans" type="text" value="">
        </div>
        <input id="btnchk" onClick="checkAns()" type="button" value="Check" >
        <div id="resultBox">***</div>
        <input id="btnnew" onClick="getNew()" type="button" value="New">
        <div id="totalMarks">Total marks : 0</div>  
    </div>
</body>
</html>
Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top