[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()
하십시오.
응원하세요!