158

私の投稿のタイトルが示すように、私は何桁あるか知りたい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ですか?

4

19 に答える 19

274

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互換性の問題が解決します。

浮動小数点演算の動作がよく知られているため、10進数の高速な数学解を作成するのは簡単ではありません。そのため、文字列へのキャストのアプローチはより簡単で、確実になります。@streetlogicsで述べたように、高速キャストは単純な数値から文字列への連結で実行できるため、置換ソリューションは次のように変換されます。

var length = (number + '').replace('.', '').length;  // for floats
于 2013-02-14T16:39:43.913 に答える
79

これが数学的な答えです(負の数でも機能します):

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のビット演算は、32ビット値でのみ機能することに注意してください(最大2,147,483,647)。したがって、それより大きい数値が予想される場合は、ビット単位のバージョンを使用しないでください。使用しないと、単に機能しません。

于 2015-01-28T22:14:30.197 に答える
23

これは「javascriptgetnumberofdigits」の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
于 2014-05-01T21:17:09.893 に答える
7

次のように長さを取得するのは簡単です

  `${NUM}`.length

ここで、NUMは長さを取得するための数値です。

于 2019-11-22T04:42:52.133 に答える
2

数字が必要な場合(区切り文字の後)、数値を分割して長さの2番目の部分(ポイントの後)を数えることができます。

function countDigits(number) {
    var sp = (number + '').split('.');
    if (sp[1] !== undefined) {
        return sp[1].length;
    } else {
        return 0;
    }
}
于 2015-10-12T07:59:22.397 に答える
2

私はまだJavascriptを学んでいますが、Cでこの関数を思いついたのですが、これは文字列ではなく数学とwhileループを使用するため、Javascript用に書き直しました。どういうわけか再帰的に行うことができるかもしれませんが、私はまだ概念を理解していません:(これは私が思いついた最高のものです。それがどれだけの数で機能するかはわかりませんが、100を入れたときに機能しました数字。

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

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

編集:整数値でのみ機能します

于 2015-11-04T17:35:17.217 に答える
2

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

于 2016-05-22T12:01:07.547 に答える
2

このトリックで使用できます:

(''+number).length
于 2019-12-26T15:48:35.390 に答える
1

注:この関数は、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()してください。

応援よ!

于 2019-02-08T13:09:57.207 に答える
1
`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));
于 2020-03-12T14:21:53.713 に答える
1

数値の長さを取得するには、次の式を使用してください。

length = variableName.toString().length
于 2020-07-28T09:17:31.690 に答える
1

1.35 => 2この質問に技術的に答えることはできませんが、数値の小数部分の長さ(または)を探している場合は、次の1 => 0ことが役立つ場合があります。

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

注:この回答をグーグルで検索する人は、数値の小数部の長さを取得するための解決策も必要になる可能性があるため、ここに投稿する理由。

于 2021-03-18T22:10:14.427 に答える
0

2桁:ECMAScript 6(ES6)で数値の2桁以上が必要な場合の単純な関数:

const zeroDigit = num => num.toString().length === 1 ? `0${num}` : num;
于 2018-06-05T10:17:18.447 に答える
0

問題の説明:string.length()jsfunctionを使用していない数値/文字列をカウントします。解決策:Forloopを介してこれを行うことができます。例えば

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

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

else{
  this.number = this.y;
}    

}

于 2018-08-17T10:00:30.003 に答える
0

これが私の解決策です。正の数と負の数で機能します。お役に立てれば

function findDigitAmount(num) {

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

 return lengthNumber.length;
}


(findDigitAmount(-96456431);    // 8
(findDigitAmount(1524):         // 4
于 2019-10-14T07:21:31.227 に答える
0

負の数と浮動小数点数の両方でも機能し、高価な文字列操作関数を呼び出さないソリューション:

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
   }
}
于 2020-08-13T16:01:16.280 に答える
0

整数桁の場合、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))

于 2020-10-19T10:56:35.030 に答える
0

Math.abs関数を使用して、負の数を正に変え、正の数をそのまま維持することができます。次に、数値を文字列に変換して長さを指定できます。

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

私はこの方法が最も簡単で、かなりうまくいくと思いました。ただし、正の数が提供されることが確実な場合は、それを文字列に変換してから長さを使用できます。

num.toString().length
于 2020-10-24T07:09:48.630 に答える
-7

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;

結果は次のようになります:4

構文:

配列の長さを返します。

array.length

配列の長さを設定します。

array.length=number
于 2016-06-02T06:23:53.160 に答える