1. ホーム
  2. javascript

[解決済み] JavaScriptで桁数を取得する

2022-04-27 04:08:37

質問

タイトルにあるように、何桁の 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;
}

UPDATEです。 コメントで述べたように、上記の例は浮動小数点数の場合はうまくいきません。これを動作させるためには String(number).replace('.', '').length または、正規表現で桁を数える。 String(number).match(/\d/g).length .

スピードという点では、与えられた数字の桁数を求めるのに最も速い方法は、数学的に行うことである。例えば 正の整数 を使った素晴らしいアルゴリズムがあります。 log10 :

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

すべての種類の整数(負を含む)に対して、次のような素晴らしい最適化されたソリューションがあります。 をご覧ください。 の使用には注意が必要です。 Math.log10 多くのレガシーブラウザでサポートされていないためです。そのため Math.log10(x)Math.log(x) * Math.LOG10E を使えば、互換性の問題は解決します。

10進数の高速な数学的解法を作成するのは 浮動小数点演算のよく知られた動作 そのため、キャストからストリングへのアプローチの方がより簡単でフールプルーフです。このように ストリートロジック 高速キャストは、単純な数値と文字列の連結で行うことができ、その結果 置き換える という解決策に変換される。

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