Programing

JavaScript에서 정수 자르기 / 반올림?

lottogame 2020. 11. 23. 07:40
반응형

JavaScript에서 정수 자르기 / 반올림?


내가 작성중인 스크립트의 경우 반올림 된 숫자를 표시해야하지만 소수점이나 그 이후의 숫자는 표시하지 않습니다. 나는 그것을 세 번째 자리로 반올림했지만 JavaScript가 substrPHP와 같은 기능을 가지고 있지 않은 것처럼 보이기 때문에 소수점과 그 이후의 모든 것을 삭제하는 방법을 모르겠습니다 .

권장 사항이 있습니까?


string 이 있으면 정수로 구문 분석하십시오.

var num = '20.536';
var result = parseInt(num, 10);  // 20

숫자있는 경우 ECMAScript 6은 Math.truncFirefox 24 이상 및 Edge에서 이미 사용 가능한 완전히 일관된 자르기를 제공합니다 .

var num = -2147483649.536;
var result = Math.trunc(num);  // -2147483649

당신이 그것에 의존 할 수없고 항상 양수를 가질 것이라면, 당연히 다음을 사용할 수 있습니다 Math.floor:

var num = 20.536;
var result = Math.floor(num);  // 20

마지막으로 [−2147483648, 2147483647]에 숫자가 있으면 비트 연산자를 사용하여 32 비트로자를 수 있습니다. | 0일반적이며 >>> 0부호없는 32 비트 정수를 얻는 데 사용할 수 있습니다.

var num = -20.536;
var result = num | 0;  // -20

Mozey의 trunc2함수 와 함께 Travis Pessetto의 대답 은 JavaScript가 과학적 표기법에서 매우 작거나 매우 큰 부동 소수점 숫자를 나타내는 방법을 고려할 때 유일한 정답이었습니다.

예를 들어 parseInt(-2.2043642353916286e-15)는 해당 입력을 올바르게 구문 분석하지 않습니다. 반환 0하는 대신 -2.

이것은 그것을 수행하는 올바른 (그리고 가장 덜 미친) 방법입니다.

function truncate(number)
{
    return number > 0
         ? Math.floor(number)
         : Math.ceil(number);
}

여기에 솔루션을 추가하겠습니다. 값이 0보다 크면 floor를 사용하고 0보다 작을 때 ceil을 사용할 수 있습니다.

function truncateToInt(x)
{
    if(x > 0)
    {
         return Math.floor(x);
    }
    else
    {
         return Math.ceil(x);
    }
 }

그때:

y = truncateToInt(2.9999); // results in 2
y = truncateToInt(-3.118); //results in -3

숫자를 문자열로 변환하고 소수점 이하 모든 것을 버립니다.

trunc = function(n) { return Number(String(n).replace(/\..*/, "")) }

trunc(-1.5) === -1

trunc(1.5) === 1

2013-07-10 수정

minitech가 지적한 것처럼 문자열 방법이 약간 과도하게 보입니다. 따라서 여기와 다른 곳에 나열된 다양한 방법을 비교합니다.

function trunc1(n){ return parseInt(n, 10); }
function trunc2(n){ return n - n % 1; }
function trunc3(n) { return Math[n > 0 ? "floor" : "ceil"](n); }
function trunc4(n) { return Number(String(n).replace(/\..*/, "")); }

function getRandomNumber() { return Math.random() * 10; }

function test(func, desc) {
    var t1, t2;
    var ave = 0;
    for (var k = 0; k < 10; k++) {
        t1 = new Date().getTime();
        for (var i = 0; i < 1000000; i++) {
            window[func](getRandomNumber());
        }
        t2 = new Date().getTime();
        ave += t2 - t1;
    }
    console.info(desc + " => " + (ave / 10));
}

test("trunc1", "parseInt");
test("trunc2", "mod");
test("trunc3", "Math");
test("trunc4", "String");

결과는 하드웨어에 따라 다를 수 있으며 다음과 같습니다.

parseInt => 258.7
mod      => 246.2
Math     => 243.8
String   => 1373.1

Math.floor / ceil 메서드는 parseInt 및 mod보다 약간 빠릅니다. 문자열은 다른 방법에 비해 성능이 떨어집니다.


사용 Math.floor():

var f = 20.536;
var i = Math.floor(f);  // 20

http://jsfiddle.net/J4UVV/1/


Math.trunc () 함수는 모든 소수 자릿수를 제거합니다.

양수의 경우 Math.floor ()와 정확히 동일하게 작동합니다.

console.log(Math.trunc(89.13349)); // output is 89

음수의 경우 Math.ceil ()과 동일하게 작동합니다.

console.log(Math.trunc(-89.13349)); //output is -89

참고 URL : https://stackoverflow.com/questions/10149806/truncate-round-whole-number-in-javascript

반응형