Question

Comment puis-je arrondir un nombre en JavaScript?

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

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

Était-ce utile?

La solution

Math.floor()

est la réponse.

Autres conseils

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

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

Arrondissez vers zéro - généralement appelé Truncate () , mais non pris en charge par JavaScript - peut être émulé 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()

Math.floor () fonctionnera, mais c'est très lent comparé à l'utilisation d'une opération OU au niveau du bit:

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

ÉDITER Math.floor () n'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 );

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

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

rounded=Math.floor(number);

Pour arrondir à zéro (si le nombre peut être arrondi à 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);

Arrondir un numéro vers 0 peut être effectué en soustrayant sa partie fractionnaire signée numéro% 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 :

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)

Nous avons bidouillé quelqu'un avec le code de quelqu'un d'autre aujourd'hui et avons 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 vers la droite se propageant par les signes (> >), voir Opérateurs binaires 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.

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>

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 ce qu’elle fait. 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>
Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top