[javascript] 숫자의 길이는 어떻게 알 수 있습니까?

JavaScript 또는 jQuery에서 숫자의 길이를 찾고 있습니까?

나는 value.length성공하지 않고 시도했지만 이것을 먼저 문자열로 변환해야합니까?



답변

var x = 1234567;

x.toString().length;

이 프로세스는 또한 효과 Float NumberExponential number있습니다.


답변

좋아, 많은 답변이 있지만 이것은 재미를 위해 또는 수학이 중요하다는 것을 기억하기위한 순수한 수학입니다.

var len = Math.ceil(Math.log(num + 1) / Math.LN10);

이것은 실제로 지수 형식 인 경우에도 숫자의 “길이”를 제공합니다. num음수가 아닌 경우, 음수가 아닌 경우 절대 값을 취한 후 부호를 조정하십시오.

ES2015 업데이트

이제는 Math.log10일입니다 . 간단히 쓸 수 있습니다.

const len = Math.ceil(Math.log10(num + 1));


답변

node.js 에서이 기능을 사용 해왔으며 지금까지 가장 빠른 구현입니다.

var nLength = function(n) { 
    return (Math.log(Math.abs(n)+1) * 0.43429448190325176 | 0) + 1; 
}

양수와 음수를 지수 형식으로 처리해야하며 정수 부분의 길이를 부동 수로 반환해야합니다.

다음 참조는이 방법에 대한 통찰력을 제공해야합니다.
Weisstein, Eric W. “Number Length.” MathWorld–Wolfram 웹 리소스에서.

비트 비트 연산이 Math.abs를 대체 할 수 있다고 생각하지만 jsperf는 Math.abs가 대다수의 js 엔진에서 제대로 작동한다는 것을 보여줍니다.

업데이트 : 의견에서 언급 했듯이이 솔루션에는 몇 가지 문제가 있습니다.

Update2 (해결 방법) : 어느 시점에서 정밀도 문제가 발생하고 Math.log(...)*0.434...예상치 못한 동작이 발생한다고 생각합니다 . 그러나 Internet Explorer 또는 모바일 장치가 차 한잔이 아닌 경우이 작업을 Math.log10기능으로 대체 할 수 있습니다 . Node.js에서 함수 nLength = (n) => 1 + Math.log10(Math.abs(n) + 1) | 0;를 사용 Math.log10하여 예상대로 작동 하는 빠른 기본 테스트를 작성 했습니다. 주의하시기 바랍니다 Math.log10보편적으로 지원되지 않습니다.


답변

길이를 얻으려면 숫자를 문자열로 만들어야합니다.

var num = 123;

alert((num + "").length);

또는

alert(num.toString().length);


답변

템플릿 문자열을 사용할 수도 있습니다.

const num = 123456
`${num}`.length // 6


답변

정수를 문자열로 변환하지 않으면 펑키 루프를 만들 수 있습니다.

var number = 20000;
var length = 0;
for(i = number; i > 1; ++i){
     ++length;
     i = Math.floor(i/10);
}

alert(length);​

데모 : http://jsfiddle.net/maniator/G8tQE/


답변

먼저 문자열로 변환하십시오.

var mynumber = 123;
alert((""+mynumber).length);

빈 문자열을 추가하면 암시 적 mynumber으로 문자열로 바뀝니다.