[javascript] JavaScript로 자릿수 얻기

내 게시물 제목에서 알 수 있듯이 몇 자릿수인지 알고 싶습니다 var number. 예 : number = 15;내 함수가 2. 현재는 다음과 같습니다.

function getlength(number) {
  return number.toString().length();
}

그러나 Safari는 다음과 같은 이유로 작동하지 않는다고 말합니다 TypeError.

'2' is not a function (evaluating 'number.toString().length()')

보시다시피 '2'실제로 올바른 솔루션입니다. 하지만 왜 그렇 not a function습니까?



답변

length메서드가 아니라 속성입니다. 호출 할 수 없으므로 괄호가 필요하지 않습니다 ().

function getlength(number) {
    return number.toString().length;
}

업데이트 : 주석에서 논의했듯이 위의 예는 부동 숫자에 대해 작동하지 않습니다. 작동하도록하기 위해으로 마침표를 제거 String(number).replace('.', '').length하거나 정규식으로 숫자를 계산할 수 있습니다 : String(number).match(/\d/g).length.

속도 측면에서 잠재적으로 주어진 숫자에서 자릿수를 얻는 가장 빠른 방법은 수학적으로 수행하는 것입니다. 내용은 양의 정수 멋진 알고리즘이 있습니다 log10:

var length = Math.log(number) * Math.LOG10E + 1 | 0;  // for positive integers

모든 유형의 정수 (음수 포함)에 대해 @ Mwr247 의 훌륭하게 최적화 된 솔루션이 있지만 Math.log10많은 레거시 브라우저에서 지원되지 않으므로 사용시주의해야 합니다. 교체 그래서 Math.log10(x)함께하는 Math.log(x) * Math.LOG10E호환성 문제를 해결합니다.

부동 소수점 수학의 잘 알려진 동작 으로 인해 십진수에 대한 빠른 수학적 솔루션을 만드는 것은 쉽지 않으므로 문자열로 변환하는 방법이 더 쉽고 바보 같은 증거가 될 것입니다. @streetlogics에서 언급했듯이 간단한 숫자 대 문자열 연결로 빠른 캐스팅을 수행 할 수 있으므로 대체 솔루션이 다음과 같이 변환됩니다.

var length = (number + '').replace('.', '').length;  // for floats


답변

다음은 수학적 대답입니다 (음수에도 적용됨).

function numDigits(x) {
  return Math.max(Math.floor(Math.log10(Math.abs(x))), 0) + 1;
}

그리고 위의 최적화 된 버전 (보다 효율적인 비트 연산) :

function numDigits(x) {
  return (Math.log10((x ^ (x >> 31)) - (x >> 31)) | 0) + 1;
}

기본적으로 음수 값이 올바르게 작동 할 수 있도록 입력의 절대 값을 가져 오는 것으로 시작합니다. 그런 다음 log10 연산을 실행하여 입력의 10의 거듭 제곱을 제공합니다 (다른 밑에서 작업하는 경우 해당 밑에 대한 로그를 사용합니다), 즉 자릿수입니다. 그런 다음 출력을 플로어링하여 그 정수 부분 만 가져옵니다. 마지막으로 max 함수를 사용하여 10 진수 값을 수정하고 (0과 1 사이의 모든 분수 값은 음수 대신 1을 반환 함) 개수를 얻기 위해 최종 출력에 1을 더합니다.

위는 (예제 입력을 기반으로) 정수의 자릿수를 세고 싶다고 가정합니다 (따라서 12345 = 5, 따라서 12345.678 = 5). 값의 총 자릿수를 계산하려면 (12345.678 = 8) 위의 함수에서 ‘return’앞에 이것을 추가합니다.

x = Number(String(x).replace(/[^0-9]/g, ''));


답변

이것이 “javascript get number of numbers”에 대한 Google 검색에서 나왔기 때문에 내부 캐스팅에 의존하는 더 짧은 대안이 있다는 것을 알려 드리고 싶었습니다.

var int_number = 254;
var int_length = (''+int_number).length;

var dec_number = 2.12;
var dec_length = (''+dec_number).length;

console.log(int_length, dec_length);

수율

3 4


답변

숫자 (구분자 뒤)가 필요한 경우 숫자를 분할하고 두 번째 부분 (점 뒤)을 계산할 수 있습니다.

function countDigits(number) {
    var sp = (number + '').split('.');
    if (sp[1] !== undefined) {
        return sp[1].length;
    } else {
        return 0;
    }
}


답변

var i = 1;
while( ( n /= 10 ) >= 1 ){ i++ }
23432          i = 1
 2343.2        i = 2
  234.32       i = 3
   23.432      i = 4
    2.3432     i = 5
    0.23432

답변

나는 여전히 Javascript를 배우고 있지만 얼마 전에 C 에서이 함수를 생각해 냈습니다.이 함수는 문자열이 아닌 수학 및 while 루프를 사용하므로 Javascript를 위해 다시 작성했습니다. 아마도 이것은 재귀 적으로 수행 될 수 있지만 여전히 개념을 실제로 파악하지 못했습니다. (이것이 제가 생각 해낼 수있는 최선의 방법입니다. 얼마나 많은 숫자가 작동하는지 잘 모르겠습니다. 자릿수.

function count_digits(n) {
    numDigits = 0;
    integers = Math.abs(n);

    while (integers > 0) {
        integers = (integers - integers % 10) / 10;
        numDigits++;
    }
    return numDigits;
}

편집 : 정수 값에서만 작동


답변

참고 : 이 함수는 소수점 평균 뒤의 숫자 를 무시 합니다 . 소수점으로 세고 싶다면 . 이 점을 직접 확인하십시오!Math.floor()

function digitCount ( num )
{
     return Math.floor( num.toString()).length;
}

 digitCount(2343) ;

// ES5 +

 const digitCount2 = num => String( Math.floor( Math.abs(num) ) ).length;

 console.log(digitCount2(3343))

기본적으로 여기서 무슨 일이 일어나고 있는지. toString()그리고 String()숫자를 문자열로 변환하는 동일한 내장 함수입니다. 일단 변환하면 내장 함수로 문자열의 길이를 찾을 수 있습니다 length.

경고 : 하지만이 기능은 음수에 대해 제대로 작동하지 않을 것입니다. 음수로 재생하려는 경우이 답변확인 하거나 간단히 입력 Math.abs()하십시오.

응원하세요!