Skip to content

Commit

Permalink
2024/07/13 時点の英語版に基づき更新
Browse files Browse the repository at this point in the history
  • Loading branch information
mfuji09 committed Oct 11, 2024
1 parent a1e3643 commit 42af0a8
Showing 1 changed file with 17 additions and 6 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -2,12 +2,12 @@
title: Number.prototype.toString()
slug: Web/JavaScript/Reference/Global_Objects/Number/toString
l10n:
sourceCommit: fcd80ee4c8477b6f73553bfada841781cf74cf46
sourceCommit: 6e93ec8fc9e1f3bd83bf2f77e84e1a39637734f8
---

{{JSRef}}

**`toString()`** メソッドは、指定された数値を表現する文字列を返します
**`toString()`** は {{jsxref("Number")}} 値のメソッドで、この数値を表現する文字列を返します

{{EmbedInteractiveExample("pages/js/number-tostring.html")}}

Expand All @@ -25,12 +25,14 @@ toString(radix)

### 返値

指定された数値を表現する文字列です。
指定された数値を表現する文字列です。基数が 10 で、(符号を無視した)数値の規模が 10<sup>21</sup> 以上または 10<sup>-6</sup> 以下の場合には、科学記数法が使用されます。

## 例外

- {{jsxref("RangeError")}}
- : `toString()` は、与えられた `radix``2` 未満、または `36` を超える場合、{{jsxref("RangeError")}} が発生します。
- : `radix` が 2 未満、または 36 を超える場合に発生します。
- {{jsxref("TypeError")}}
- : {{jsxref("Number")}} ではないオブジェクトに対してこのメソッドが呼び出された場合に発生します。

## 解説

Expand All @@ -49,9 +51,18 @@ console.log((10 ** 21.5).toString()); // "3.1622776601683794e+21"
console.log((10 ** 21.5).toString(8)); // "526665530627250154000000"
```

浮動小数点数の基本的な表現は、2 進法の科学記法です([数値エンコード](/ja/docs/Web/JavaScript/Reference/Global_Objects/Number#数値のエンコーディング)を参照)。しかし、`toString()` メソッドは、数値の値のこの最も正確な表現を直接使用しません。むしろ、アルゴリズムは、隣接する数値の値から出力を区別するために必要な最小の有効数字を使用します。例えば、数値が大きい場合、同じ浮動小数点数に対して等価な文字列表現が多数存在することになり、`toString()` は右側に最も多くの 0 があるもの(任意の基数に対して)を選択します。

```js
console.log((1000000000000000128).toString()); // "1000000000000000100"
console.log(1000000000000000100 === 1000000000000000128); // true
```

一方、{{jsxref("Number.prototype.toFixed()")}} および {{jsxref("Number.prototype.toPrecision()")}} を使用すると、精度を指定でき、 `toString()` よりも正確な結果を得ることができます。

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

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

```js
Number.prototype.toString = () => "Overridden";
Expand Down Expand Up @@ -86,7 +97,7 @@ const hex = "CAFEBABE";
const bin = parseInt(hex, 16).toString(2); // "11001010111111101011101010111110"
```

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

## 仕様書

Expand Down

0 comments on commit 42af0a8

Please sign in to comment.