Как я могу округлить число в JavaScript?

Как я могу округлить число в JavaScript?

math.round() не работает, потому что он округляет его до ближайшего десятичного знака.

Я не уверен, что есть лучший способ сделать это, кроме как разбить его на десятичную точку при сохранении Первого БИТа. Должно быть...

10 ответов


Math.floor()

ответ.


круг к отрицательной бесконечности -Math.floor()

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

раунд к нулю-обычно называется Truncate(), но не поддерживается JavaScript - можно эмулировать с помощью Math.ceil() для отрицательных чисел и Math.floor() для положительных чисел.

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

Math.floor() будет работать, но очень медленно по сравнению с использованием побитового OR работы:

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

редактировать Math.floor() и не медленнее, чем с помощью оператора. Спасибо Джейсону С за проверку моей работы.

вот код, который я использовал для проверки:

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

можно попробовать использовать эту функцию, если вам нужно округлить до определенного числа знаков после запятой

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

примеры

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

чтобы округлить вниз к отрицательной бесконечности, используйте:

rounded=Math.floor(number);

чтобы округлить до нуля (если число может округляться до 32-разрядного целого числа между -2147483648 и 2147483647), используйте:

rounded=number|0;

чтобы округлить до нуля (для любого числа), используйте:

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

округление number в направлении 0 можно сделать, вычитая его подписанную дробную часть number % 1:

rounded = number - number % 1;

как Math.floor (выстрелов в сторону -Infinity) этот метод является совершенно точным.

существуют различия в обработке -0, +Infinity и -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)

возился с чьим-то кодом elses сегодня и нашел следующее, которое, похоже, также округляется:

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

для получения дополнительной информации о арифметический сдвиг вправо(>>) см.MDN побитовые операторы

Мне потребовалось некоторое время, чтобы понять, что это делает: D

но как указано выше, математика.floor() работает и выглядит более читаемым, на мой взгляд.


здесь математика.пол используется в простом примере. Это может помочь новому разработчику получить представление о том, как использовать его в функции и что он делает. Надеюсь, это поможет!

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

вам нужно поставить -1, чтобы округлить половину вниз и после этого умножить на -1, как пример ниже.

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