質問

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

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

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

役に立ちましたか?

解決

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()は、|を使用するよりも遅くありません。オペレーター。仕事をチェックしてくれた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 );

特定の小数点以下の桁数に切り捨てる必要がある場合は、この関数を使用できます

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

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

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)

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

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

符号伝播右シフト(&gt;&gt;)の詳細については、 MDNビット単位演算子

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

しかし、上で強調したように、Math.floor()は動作し、私の意見ではより読みやすいように見えます。

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

これは、簡単な例で使用されている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>
ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top