重複の可能性:
Javascript で文字列の先頭のゼロを切り捨てる
Javascript で数値から先頭のゼロを削除する最も簡単でクロスブラウザー互換の方法は何ですか?
たとえば、テキスト ボックスの値が 014 または 065 の場合、14 または 65 のみが返されます。
重複の可能性:
Javascript で文字列の先頭のゼロを切り捨てる
Javascript で数値から先頭のゼロを削除する最も簡単でクロスブラウザー互換の方法は何ですか?
たとえば、テキスト ボックスの値が 014 または 065 の場合、14 または 65 のみが返されます。
この変換には 4 つの方法を使用できます
10
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);
プリミティブ型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);
parseInt
ですか?基数が未定義または 0 (または存在しない) の場合、JavaScript は次のことを想定します。
どの基数が選択されるかは、実装に依存します。ECMAScript 5 では 10 (10 進数) を使用するように指定されていますが、まだすべてのブラウザーがこれをサポートしているわけではありません。
このため、parseInt を使用する場合は必ず基数を指定してください。
正規表現:
"014".replace(/^0+/, '')
なぜこれをしたいのかは明らかではありません。正しい数値を取得したい場合は、単項+
[docs]を使用できます。
value = +value;
テキストをフォーマットしたいだけなら、正規表現の方が良いかもしれません。それはあなたが扱っている価値観に依存します。整数しかない場合は、
input.value = +input.value;
も大丈夫です。もちろん、浮動小数点値でも機能しますが、ポイントの後にある桁数によっては、それを数値に変換してから文字列に戻すと、(少なくとも表示のために) 一部が削除される可能性があります。