253

如何在 JavaScript 中舍入一个数字?

math.round()不起作用,因为它将它四舍五入到最接近的小数。

我不确定是否有更好的方法来做到这一点,而不是在保留第一位的小数点处将其分开。必须有...

4

11 回答 11

451

使用Math.floor()是这样做的一种方式。

更多信息:https ://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Math/floor

于 2009-09-16T23:08:05.437 回答
65

向负无穷大舍入 -Math.floor()

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

可以使用 向零舍入Math.trunc()。较旧的浏览器不支持此功能。如果您需要支持这些,您可以使用Math.ceil()负数和Math.floor()正数。

+3.5 => +3.0 using Math.floor()
-3.5 => -3.0 using Math.ceil()
于 2009-09-16T23:16:14.423 回答
36

Math.floor()可以,但与使用按位OR运算相比非常慢:

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

EDIT Math.floor()并不比使用 |操作员。感谢 Jason S 检查我的工作。

这是我用来测试的代码:

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 );
于 2009-09-16T23:15:47.717 回答
23

如果您需要向下舍入到特定的小数位数,您可以尝试使用此功能

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
于 2014-02-13T16:47:09.997 回答
10

可以通过减去其带符号的小数部分来number实现向a 舍入(又名“截断其小数部分”) :0number % 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
于 2014-10-29T23:08:25.543 回答
7

要向下舍入到负无穷大,请使用:

rounded=Math.floor(number);

要向下舍入为零(如果数字可以舍入为介于 -2147483648 和 2147483647 之间的 32 位整数),请使用:

rounded=number|0;

要向下舍入为零(对于任何数字),请使用:

if(number>0)rounded=Math.floor(number);else rounded=Math.ceil(number);
于 2014-03-03T21:57:37.013 回答
6

今天正在摆弄别人的代码,发现以下内容似乎也有所下降:

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

有关符号传播右移 (>>) 的更多信息,请参阅MDN 位运算符

我花了一段时间才弄清楚这是在做什么:D

但正如上面强调的那样,我认为 Math.floor() 可以工作并且看起来更具可读性。

于 2012-03-05T14:38:17.807 回答
5
Math.floor(1+7/8)
于 2009-09-16T23:14:02.193 回答
2

这是我发现的可靠工作的最佳解决方案。

function round(value, decimals) {
    return Number(Math.floor(parseFloat(value + 'e' + decimals)) + 'e-' + decimals);
 }

归功于:杰克 L 摩尔的博客

于 2020-07-29T17:27:21.340 回答
1

您需要将 -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>
于 2017-10-25T13:00:39.927 回答
1

这是一个简单示例中使用的 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'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>
于 2018-10-10T03:09:47.200 回答