문제

JavaScript에서 숫자를 어떻게 반올림 할 수 있습니까?

math.round() 가장 가까운 소수점으로 반올림하기 때문에 작동하지 않습니다.

첫 번째 비트를 유지하는 데 소수점에서 분리하는 것보다 더 나은 방법이 있는지 확실하지 않습니다. 있어야합니다 ...

도움이 되었습니까?

해결책

Math.floor()

답입니다.

다른 팁

부정적인 무한대를 향해 반드시 - Math.floor()

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

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

0으로 반올림하려면 (숫자가 -2147483648과 2147483647 사이의 32 비트 정수로 반올림 할 수있는 경우) :

rounded=number|0;

0으로 반올림하려면 (모든 숫자로) 사용하십시오.

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

반올림 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
Math.floor(1+7/8)

오늘 누군가 Elses 코드와 함께 둥글고 있었고 다음을 발견했습니다.

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

서명 프로파이지 올바른 교대 (>>)에 대한 자세한 내용은 참조하십시오. MDN Bitwise 연산자

이것이하고있는 일을 해결하는 데 시간이 걸렸습니다 : 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