JavaScript에서 정수 자르기 / 반올림?
내가 작성중인 스크립트의 경우 반올림 된 숫자를 표시해야하지만 소수점이나 그 이후의 숫자는 표시하지 않습니다. 나는 그것을 세 번째 자리로 반올림했지만 JavaScript가 substr
PHP와 같은 기능을 가지고 있지 않은 것처럼 보이기 때문에 소수점과 그 이후의 모든 것을 삭제하는 방법을 모르겠습니다 .
권장 사항이 있습니까?
string 이 있으면 정수로 구문 분석하십시오.
var num = '20.536';
var result = parseInt(num, 10); // 20
숫자 가 있는 경우 ECMAScript 6은 Math.trunc
Firefox 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
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
'Programing' 카테고리의 다른 글
제출하기 전에 POST 매개 변수 추가 (0) | 2020.11.24 |
---|---|
Mac OS X Lion에 Python 라이브러리 'gevent'를 설치하려면 어떻게해야합니까? (0) | 2020.11.23 |
AttributeError : '모듈'개체에 'urlretrieve'속성이 없습니다. (0) | 2020.11.23 |
부적절한 구성 : 포함 된 urlconf (0) | 2020.11.23 |
PostgreSQL에서 스키마를 생성 할 때 "오류 : 역할의 구성원이어야 함" (0) | 2020.11.23 |