programing

자바스크립트로 자릿수 가져오기

stoneblock 2023. 10. 11. 20:28

자바스크립트로 자릿수 가져오기

알 수 몇 .var number가 있습니다. 예를 들어: 만약number = 15;다를(를) .2 현재는 다음과 같습니다.

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

는 .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 함수를 사용하여 소수점 값을 고정하고(0과 1 사이의 모든 분수 값은 음수가 아닌 1을 반환합니다), 카운트를 얻기 위해 최종 출력에 1을 더합니다.

위에서는 정수로 된 자릿수를 세고 싶다고 가정합니다(따라서 12345 = 5이므로 12345.678 = 5도 마찬가지).값의 총 자릿수를 세려면(따라서 12345.678 = 8) 위의 두 함수 중 하나의 '반환' 앞에 이 값을 추가합니다.

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

* 자바스크립트의 비트 와이즈 연산은 32비트 값(최대 2,147,483,647)에서만 작동합니다.따라서 그 이상의 숫자가 필요하다면 비트 와이즈 버전을 사용하지 마십시오. 그렇지 않으면 작동하지 않습니다.

구글 검색에서 "자바스크립트 get number number of digits"가 나왔기 때문에, 저는 당신을 위해 내부 캐스팅에 의존하는 더 짧은 대안이 있다는 것을 버리고 싶었습니다.

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

다음과 같은 길이를 얻는 것은 간단할 것입니다.

  `${NUM}`.length

여기서 NUM은 길이를 구하는 숫자입니다.

다음과 같은 방법을 사용할 수 있습니다.

(''+number).length

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

Math.abs 함수를 사용하면 음수를 양수로 바꾸고 양수를 그대로 유지할 수 있습니다. 그러면 숫자를 문자열로 변환하고 길이를 제공할 수 있습니다.

Math.abs(num).toString().length;

이 방법이 가장 쉽고 효과가 좋습니다. 하지만 긍정적인 숫자를 제공받는 것이 확실하다면 그냥 문자열로 바꾼 후 길이를 사용할 수 있습니다.

num.toString().length

숫자(분리자 뒤)가 필요한 경우 숫자와 카운트 길이 두 번째 부분(점 뒤)을 간단히 분할할 수 있습니다.

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

저는 아직 자바스크립트를 배우고 있지만 얼마 전 C에서 문자열이 아닌 수학과 잠시 루프를 사용하는 이 기능을 고안하여 자바스크립트용으로 다시 작성하였습니다.어쩌면 이것이 어떻게든 재발적으로 이루어질 수 있을지도 모르지만 나는 아직도 개념을 제대로 파악하지 못했습니다 :( 이것이 내가 생각해 낼 수 있는 최선입니다.숫자가 얼마나 되는지 모르겠어요, 100자리를 입력했을 때는 잘 됐어요.

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

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

edit: 정수 값에서만 작동합니다.

참고 : 이 함수는 10진수 평균 도트 뒤의 숫자를 무시합니다. 만약 당신이 10진수로 숫자를 세고 싶다면 다음을 제거합니다.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()그 안에

응원합니다!

문제 문: string.length() jsfunction을 사용하지 않는 수/ 문자열입니다.해결책: 포루프를 통해 할 수 있습니다.

for (x=0; y>=1 ; y=y/=10){
  x++;
}

if (x <= 10) {
  this.y = this.number;                
}   

else{
  this.number = this.y;
}    

}

`You can do it by simple loop using Math.trunc() function. if in interview interviewer ask to do it without converting it into string`
    let num = 555194154234 ;
    let len = 0 ;
    const numLen = (num) => {
     for(let i = 0; i < num ||  num == 1 ; i++){
        num = Math.trunc(num/10);
        len++ ;
     }
      return len + 1 ;
    }
    console.log(numLen(num));

번호의 길이를 구하려면 다음 식을 사용하세요.

length = variableName.toString().length

기술적으로 이 질문에 대답하지 않는 동안, 만약 당신이 숫자의 분수 부분의 길이를 찾고 있다면(예:1.35 => 2아니면1 => 0), 다음과 같은 도움이 될 수 있습니다.

function fractionalDigitLength(num) {
  if (Number.isInteger(num)) return 0;
  return String(num).split('.')[1].length;
}

참고: 제가 여기에 글을 올리는 이유는 이 답변을 구글링하는 사람들이 단지 숫자의 분수 길이를 얻는 해결책을 원할 수도 있다고 생각하기 때문입니다.

두 자리 수: ECMA스크립트 6(ES6)이 있는 숫자의 두 자리 이상이 필요한 경우 단순 함수:

const zeroDigit = num => num.toString().length === 1 ? `0${num}` : num;

이것이 제 해결책입니다.이것은 양수와 음수로 작용합니다.도움이 되길 바랍니다.

function findDigitAmount(num) {

   var positiveNumber = Math.sign(num) * num;
   var lengthNumber = positiveNumber.toString();

 return lengthNumber.length;
}


(findDigitAmount(-96456431);    // 8
(findDigitAmount(1524):         // 4

음수와 부동소수 모두에서도 작동하며 값비싼 String 조작 기능을 호출하지 않는 솔루션:

function getDigits(n) {
   var a = Math.abs(n);            // take care of the sign
   var b = a << 0;                 // truncate the number
   if(b - a !== 0) {               // if the number is a float
       return ("" + a).length - 1; // return the amount of digits & account for the dot
   } else {
       return ("" + a).length;     // return the amount of digits
   }
}

인터거 디지트의 경우, 우리는 또한 연속적으로 10으로 나누어 구현할 수 있습니다:

var getNumberOfDigits = function(num){
    var count = 1;
    while(Math.floor(num/10) >= 1){
        num = Math.floor(num/10);
        ++count;
    }
    return count;
}

console.log(getNumberOfDigits(1))
console.log(getNumberOfDigits(12))
console.log(getNumberOfDigits(123))

다음은 (로그를 사용하는) 올바른 수학적 답입니다. 또한 잘 설명되어 있습니다.

function numberOfDigitsInIntegerPart(numberToGetDigitsFor: number): number {
    const valueWithoutNegative = Math.abs(numberToGetDigitsFor);

    if (valueWithoutNegative === 0) {
        // Math.log10(0) === -Infinity
        return 1;
    }

    if (valueWithoutNegative > 0 && valueWithoutNegative < 1) {
        // Math.log10(0.1) === -1
        // Math.log10(0.2) === -0.6989700043360187
        // etc
        return 1;
    }

    if (valueWithoutNegative === 1) {
        // Math.log10(1) === 0
        return 1;
    }

    // Math.log10(1.1) === 0.04139268515822507
    // Math.log10(2000) === 3.3010299956639813
    // Math.log10(10000) ==== 4
    // etc

    const powerToWhich10MustBeExponentiatedToGetValue = Math.log10(valueWithoutNegative);
    const closestRoundPowerBelowExponentationToGetValue = Math.floor(powerToWhich10MustBeExponentiatedToGetValue);

    return closestRoundPowerBelowExponentationToGetValue + 1;
}

고등학교 수학 수업을 잊어버린 사람들에게 로그는 (이 답을 쓰기 전에 가졌던 것을 알고 있습니다) 권력의 반대입니다.Math.log10(x)"x를 얻기 위해 10을 곱해야 하는 힘은 얼마인가?"라고 묻는 것입니까?

그렇게

Math.log10(100)은 2가 될 것인데, 10^2(10x10)은 100이기 때문에,

10^3(10x10x10)이 1000이므로 math.log10(1000)은 3이 됩니다.

기타

length 속성은 문자열의 길이(문자 수)를 반환합니다.

빈 문자열의 길이는 0입니다.

var str = "Hello World!";
var n = str.length;

n의 결과는 다음과 같습니다: 12

    var str = "";
    var n = str.length;

n의 결과는 다음과 같습니다. 0


배열 길이 속성:


length 속성은 배열의 요소 수를 설정하거나 반환합니다.

var fruits = ["Banana", "Orange", "Apple", "Mango"];
fruits.length;

결과는 다음과 같습니다:

구문:

배열 길이를 반환합니다.

array.length

배열 길이를 설정합니다.

array.length=number

언급URL : https://stackoverflow.com/questions/14879691/get-number-of-digits-with-javascript