web-dev-qa-db-ger.com

Wie kann ich eine Zahl in Javascript abrunden?

Wie kann ich eine Zahl in JavaScript abrunden?

math.round() funktioniert nicht, da es auf die nächste Dezimalstelle gerundet wird. 

Ich bin mir nicht sicher, ob es eine bessere Möglichkeit gibt, es anders zu tun, als es beim Dezimalen zu trennen, wenn man das erste Bit behält. Da muss sein...

200
Ben Shelock
Math.floor()

ist die Antwort.

391
phoebus

Runde in Richtung der negativen Unendlichkeit - Math.floor()

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

Runde gegen Null - normalerweise als Truncate() bezeichnet, aber nicht von JavaScript unterstützt - kann mit Math.ceil() für negative Zahlen und Math.floor() für positive Zahlen emuliert werden.

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

Math.floor() wird funktionieren, ist aber im Vergleich zu einer bitweisen OR-Operation sehr langsam:

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

EDITMath.floor() ist nicht langsamer als das | Operator. Danke an Jason S für die Überprüfung meiner Arbeit.

Hier ist der Code, den ich getestet habe:

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 );
21
geraldalewis

Sie können versuchen, diese Funktion zu verwenden, wenn Sie auf eine bestimmte Anzahl von Dezimalstellen abrunden müssen

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
19
Petr Hurtak

Zum Abrunden in Richtung der negativen Unendlichkeit verwenden Sie:

rounded=Math.floor(number);

Um auf Null abzurunden (wenn die Zahl zwischen -2147483648 und 2147483647 auf eine 32-Bit-Ganzzahl gerundet werden kann): 

rounded=number|0;

Zum Abrunden auf Null (für eine beliebige Zahl) verwenden Sie:

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

Das Runden einer number in Richtung 0 kann durch Subtrahieren des vorzeichenbehafteten gebrochenen Teils number % 1 erfolgen:

rounded = number - number % 1;

Wie Math.floor (rundet auf -Infinity zu) ist diese Methode absolut genau.

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

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

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

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

Ich habe heute mit jemandem elses Code herumgespielt und Folgendes gefunden, was ebenfalls abrundet:

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

Weitere Informationen zur Verschiebung von Zeichen nach rechts (>>) finden Sie unter MDN Bitwise Operators

Ich habe eine Weile gebraucht, um herauszufinden, was das alles macht: D

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

3

Hier wird math.floor in einem einfachen Beispiel verwendet. Dies kann einem neuen Entwickler helfen, eine Vorstellung davon zu bekommen, wie er in einer Funktion verwendet wird und was er tut. Ich 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>

Sie müssen -1 setzen, um die Hälfte abzurunden und anschließend mit -1 zu multiplizieren, wie im Beispiel 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>