1. ホーム
  2. javascript

[解決済み] Javascriptで数値から先頭のゼロを削除する [重複]。

2022-04-22 02:48:46

質問

<ブロッククオート

重複の可能性があります。

Javascriptで文字列の先頭の0を切り捨てる

Javascriptで数値から先頭のゼロを除去する最も簡単でクロスブラウザ互換性のある方法は何ですか?

例:テキストボックスの値を014または065とした場合、14または65のみを返すようにする。

解決方法は?

この変換には、次の4つの方法を使用することができます。

  1. parseInt 基数 10
  2. 番号のコンストラクタ
  3. 単項プラス演算子
  4. 数学関数の利用(引き算)

const numString = "065";

//parseInt with radix=10
let number = parseInt(numString, 10);
console.log(number);

// Number constructor
number = Number(numString);
console.log(number);

// unary plus operator
number = +numString;
console.log(number);

// conversion using mathematical function (subtraction)
number = numString - 0;
console.log(number);


更新情報(コメントを受け付けています) なぜ、quot;large numbers"ではうまくいかないのでしょうか?

プリミティブ型の場合 Number の場合、最も安全な最大値は 2 53-1 ( Number.MAX_SAFE_INTEGER ).

console.log(Number.MAX_SAFE_INTEGER);

次に、数値の文字列を考えてみましょう。 '099999999999999999999' を、上記の方法で変換してみます。

const numString = '099999999999999999999';

let parsedNumber = parseInt(numString, 10);
console.log(`parseInt(radix=10) result: ${parsedNumber}`);

parsedNumber = Number(numString);
console.log(`Number conversion result: ${parsedNumber}`);

parsedNumber = +numString;
console.log(`Appending Unary plus operator result: ${parsedNumber}`);

parsedNumber = numString - 0;
console.log(`Subtracting zero conversion result: ${parsedNumber}`);

すべての結果が不正確になります。

それは、変換されたときに、numStringの値が Number.MAX_SAFE_INTEGER .すなわち

99999999999999999999 > 9007199254740991

という前提で行われるすべての操作を意味します。 string に変換することができます。 number のタイプは失敗します。

よりも大きい数値の場合 2 53 , プリミティブ BigInt が追加されました。ブラウザの互換性を確認する BigInt こちら .

変換コードはこのようになります。

const numString = '099999999999999999999';
const number = BigInt(numString);


追伸:なぜradixが重要なのかというと parseInt ?

radix が undefined または 0 の場合(あるいは存在しない場合)、JavaScript は以下のように仮定する。

  • 入力文字列が "0x" または "0X" で始まる場合、基数は16(16進数)であり、残りの文字列が解析されます。
  • 入力文字列が "0" で始まる場合、基数は8(8進数)または10(10進数)になります。
  • 入力文字列がその他の値で始まる場合、基数は10(10進数)になります。

どの基数を選択するかは、実装に依存する。ECMAScript 5 では 10 (10進数) が使われることが指定されていますが、すべてのブラウザがまだこれをサポートしているわけではありません。

このため parseInt を使用するときは、常に基数を指定します。