Number.prototype.toString()

toString() メソッドは、指定された数値を表現する文字列を返します。

試してみましょう

構文

js
toString()
toString(radix)

引数

radix 省略可

数値を表現するために使われる基数を指定する、 2 から 36 までの整数です。既定値は 10 です。

返値

指定された数値を表現する文字列です。

例外

RangeError

toString() は、与えられた radix2 未満、または 36 を超える場合、RangeError が発生します。

解説

Number オブジェクトは ObjecttoString() メソッドを上書きします。つまり、 Object.prototype.toString() を継承していません。Number の値では、toString メソッドは指定された基数でオブジェクトを表した文字列を返します。

10 より大きい基数では、 9 より大きい数をアルファベットの文字で示します。例えば、16 進表記(基数 16)では、a から f までが使われます。

numObj が負の場合、符号は保存されます。これは基数が 2 の場合も同様です。返される文字列は、- 記号で始まる数値の正の 2 進数表現であり、数値の 2 の補数ではありません

0-0 はどちらも文字列表現が "0" となります。Infinity"Infinity" を返し、 NaN"NaN" を返します。

数値が整数でない場合、小数点 . を用いて小数点以下の位置を区切ります。科学的記数法は、基数が10で、数の大きさ(符号は無視)が 1021 以上、10-6 以下の場合に使用します。この場合、返す文字列は常に指数の符号を明示的に指定します。

js
console.log((10 ** 21.5).toString()); // "3.1622776601683794e+21"
console.log((10 ** 21.5).toString(8)); // "526665530627250154000000"

この toString() メソッドは、this 値が数値プリミティブまたは Number ラッパーオブジェクトである必要があります。他の this 値に対しては、数値に変換しようとせずに TypeError を発生させます。

Number には [@@toPrimitive]() メソッドがないので、 Number オブジェクトテンプレートリテラル などのように文字列を期待するコンテキストで用いられるとき、 JavaScript は toString() メソッドを自動的に呼び出します。しかし、数値プリミティブは toString() メソッドを参照して [coerced to strings] (/ja/docs/Web/JavaScript/Reference/Global_Objects/String#string_coercion) するのではなく、初期の toString() 実装と同じアルゴリズムを使用して直接変換される。

js
Number.prototype.toString = () => "Overridden";
console.log(`${1}`); // "1"
console.log(`${new Number(1)}`); // "Overridden"

toString の使用

js
const count = 10;
console.log(count.toString()); // "10"

console.log((17).toString()); // "17"
console.log((17.2).toString()); // "17.2"

const x = 6;
console.log(x.toString(2)); // "110"
console.log((254).toString(16)); // "fe"
console.log((-10).toString(2)); // "-1010"
console.log((-0xff).toString(2)); // "-11111111"

数値文字列の基数変換

10 進数でない基数の数値を表す文字列がある場合、parseInt()toString() を使用して別の基数に変換することが可能です。

js
const hex = "CAFEBABE";
const bin = parseInt(hex, 16).toString(2); // "11001010111111101011101010111110"

精度の低下に注意してください。元となる数値文字列が大きすぎる(例えば Number.MAX_SAFE_INTEGER より大きい)場合、代わりに BigInt を使用してください。ただし、BigInt コンストラクタは、数値リテラルを表す文字列(0b, 0o, 0x から始まる文字列)にしか対応していません。元の基数が 2 進数、8 進数、10 進数、16 進数のいずれでもない場合は、基数変換を手で書くか、ライブラリーを使用する必要があるかもしれません。

仕様書

Specification
ECMAScript Language Specification
# sec-number.prototype.tostring

ブラウザーの互換性

BCD tables only load in the browser

関連情報