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

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

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

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

Ответ 2

Раунд к отрицательной бесконечности - 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()

Ответ 3

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

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

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

Ответ 4

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

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

Ответ 5

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

rounded=Math.floor(number);

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

rounded=number|0;

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

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

Ответ 6

Округление a 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

Ответ 7

Math.floor(1+7/8)

Ответ 8

Сегодня крутился с кем-то elses-кодом и нашел следующее, которое кажется округленным:

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

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

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

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

Ответ 9

Вам нужно положить -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>

Ответ 10

Вот math.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 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>