web-dev-qa-db-ja.com

Javascriptで数値を切り捨てるにはどうすればよいですか?

JavaScriptで数値を切り捨てるにはどうすればよいですか?

math.round()は、最も近い小数に丸めるため、機能しません。

最初のビットを保持するときに小数点でそれを分解する以外にそれを行うより良い方法があるかどうかはわかりません。がなければならない...

204
Ben Shelock
Math.floor()

答えです。

396
phoebus

負の無限大に向かって丸めます-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()
58

Math.floor()は動作しますが、ビット単位のOR操作を使用する場合と比較して非常に遅いです:

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

EDITMath.floor()は、notを使用するよりも遅いオペレーター。仕事をチェックしてくれた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 );
23
geraldalewis

特定の小数点以下の桁数に切り捨てる必要がある場合は、この関数を使用してみてください。

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
21
Petr Hurtak

負の無限大に向かって切り捨てるには、次を使用します。

rounded=Math.floor(number);

ゼロに切り捨てる(数値が-2147483648〜2147483647の32ビット整数に丸められる場合)には、次を使用します。

rounded=number|0;

(任意の数の)ゼロに切り捨てるには、次を使用します。

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

number0に丸めるには、その符号付き小数部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
5
Robert
Math.floor(1+7/8)
3
DigitalRoss

今日、他の誰かのコードをいじくり回していましたが、切り捨てられたように見える次のものも見つかりました:

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

Sign-propagating right shift(>>)の詳細については、 MDN Bitwise Operators を参照してください

これが何をしていたのかを理解するのに時間がかかりました:D

しかし、上で強調したように、Math.floor()は機能し、私の意見ではより読みやすくなります。

3

簡単な例で使用されている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>

下の例のように、-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>