web-dev-qa-db-fra.com

Comment puis-je arrondir un nombre en Javascript?

Comment puis-je arrondir un nombre en JavaScript?

math.round() ne fonctionne pas car il l'arrondit à la décimale la plus proche. 

Je ne sais pas s'il existe un meilleur moyen de le faire, sinon de le séparer à la virgule décimale pour conserver le premier bit. Il doit y avoir...

200
Ben Shelock
Math.floor()

est la réponse.

391
phoebus

Arrondi vers l'infini négatif - Math.floor()

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

Arrondir vers zéro - généralement appelé Truncate(), mais non pris en charge par JavaScript - peut être imité en utilisant Math.ceil() pour les nombres négatifs et Math.floor() pour les nombres positifs.

+3.5 => +3.0 using Math.floor()
-3.5 => -3.0 using Math.ceil()
58
Daniel Brückner

Math.floor() fonctionnera, mais c’est très lent comparé à une opération au niveau du bit OR:

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

EDITMath.floor() est pas plus lent que d'utiliser | opérateur. Merci à Jason S d'avoir vérifié mon travail.

Voici le code que j'ai utilisé pour tester:

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

Vous pouvez essayer d’utiliser cette fonction si vous devez arrondir à un nombre spécifique de décimales.

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

exemples

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

Pour arrondir vers l'infini négatif, utilisez:

rounded=Math.floor(number);

Pour arrondir à zéro (si le nombre peut arrondir à un entier de 32 bits compris entre -2147483648 et 2147483647), utilisez 

rounded=number|0;

Pour arrondir à zéro (pour n'importe quel nombre), utilisez:

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

Arrondir une number vers 0 peut être fait en soustrayant sa fraction décimale signée number % 1:

rounded = number - number % 1;

Comme Math.floor (arrondit à -Infinity), cette méthode est parfaitement précise.

Il existe des différences dans le traitement de -0, +Infinity et -Infinity bien que:

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

Je me suis mis à jouer avec le code de quelqu'un d'autre aujourd'hui et j'ai trouvé ce qui suit qui semble également arrondi:

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

Pour plus d'informations sur le décalage droit de propagation des signes (>>), voir Opérateurs binaire MDN

Il m'a fallu un certain temps pour comprendre ce que cela faisait: D

Mais comme souligné ci-dessus, Math.floor () fonctionne et semble plus lisible à mon avis.

3
Alastair Hodgson

Voici math.floor utilisé dans un exemple simple. Cela pourrait aider un nouveau développeur à se faire une idée de son utilisation dans une fonction et de ses fonctions. J'espère que ça aide!

<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>
0

Vous devez mettre -1 pour arrondir la moitié puis multiplier par -1 comme dans l'exemple ci-dessous.

<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>
0