JavaScriptで精度を保ちながら大きな整数を扱う方法

2024-04-08

JavaScriptにおける整数の最大値と精度

Number.MAX_SAFE_INTEGER の値は 9007199254740991 であり、この値を超えると精度が失われる可能性があります。

精度とは?

数値表現において、精度とは小数点以下の桁数のことを指します。JavaScriptでは、整数値は64ビット浮動小数点型で表現されます。これは、整数部分だけでなく小数点以下の53桁までの精度を持つことを意味します。

しかし、Number.MAX_SAFE_INTEGER を超えるような大きな整数を扱う場合、この精度が失われる可能性があります。これは、64ビット浮動小数点型の表現範囲を超えてしまうためです。

精度が失われる例

以下は、精度が失われる例です。

const num1 = 9007199254740992;
const num2 = 1;

console.log(num1 + num2); // 9007199254740993

このコードでは、num1Number.MAX_SAFE_INTEGER + 1 を代入しています。しかし、console.log で出力してみると、期待される値 9007199254740993 ではなく 9007199254740992 と出力されます。

これは、num1 の値が Number.MAX_SAFE_INTEGER を超えているため、精度が失われてしまっているためです。

精度を保つ方法

大きな整数を扱う場合、精度を保つためにはいくつかの方法があります。

  • BigInt 型を使用する

JavaScriptでは、BigInt 型と呼ばれる、任意精度の整数値を扱う型が用意されています。BigInt 型を使用することで、精度が失われることなく大きな整数を扱うことができます。

const num1 = 9007199254740992n;
const num2 = 1n;

console.log(num1 + num2); // 9007199254740993n

このコードでは、num1num2BigInt 型リテラルを代入しています。console.log で出力してみると、期待される値 9007199254740993n が出力されます。

  • 文字列型を使用する

大きな整数を文字列型として扱うことで、精度を保つことができます。

const num1 = "9007199254740992";
const num2 = "1";

console.log(num1 + num2); // 90071992547409921

JavaScriptにおける整数の最大値は Number.MAX_SAFE_INTEGER であり、この値を超えると精度が失われる可能性があります。大きな整数を扱う場合は、BigInt 型や文字列型を使用するなど、精度を保つための対策が必要です。




精度が失われる例

const num1 = 9007199254740992;
const num2 = 1;

console.log(num1 + num2); // 9007199254740992

BigInt 型を使用する

const num1 = 9007199254740992n;
const num2 = 1n;

console.log(num1 + num2); // 9007199254740993n

文字列型を使用する

const num1 = "9007199254740992";
const num2 = "1";

console.log(num1 + num2); // 90071992547409921
  • Number.isSafeInteger() 関数を使用して、値が安全な整数範囲内かどうかを確認できます。
  • Math.floor() 関数を使用して、小数点以下の桁を切り捨てて整数部分のみを取得できます。



その他の大きな整数を扱う方法

これらのライブラリを使用することで、より簡単に大きな整数を扱うことができます。

自作関数

必要に応じて、大きな整数を扱うための自作関数を作成することもできます。

例えば、以下のような関数を作成することができます。

function add(num1, num2) {
  // ここに大きな整数の加算処理を実装
}

function subtract(num1, num2) {
  // ここに大きな整数の減算処理を実装
}

// ...

これらの自作関数を使用することで、特定の処理に必要な機能だけを実装することができます。

注意点

大きな整数を扱う場合は、以下のような点に注意する必要があります。

  • 処理速度が遅くなる可能性があります。
  • 互換性の問題が発生する可能性があります。

これらの注意点


javascript math browser


JavaScriptで画面中央にDIVを配置する方法

CSSのみで中央配置する方法jQueryのcss()メソッドを使用する方法それぞれの方法にはメリットとデメリットがあり、状況によって最適な方法は異なります。この方法はシンプルで、多くの場合に有効です。ただし、DIVの幅が固定されていない場合、画面の左右に余白が発生します。...


indexOf(), search(), includes(), startsWith(), endsWith(): 使い分け方

indexOf() と search() は、JavaScript の String オブジェクトで提供される、文字列検索のためのメソッドです。どちらも部分一致検索に使用できますが、いくつかの重要な違いがあります。検索対象indexOf() は、文字列のみを検索できます。...


【保存版】もう迷わない!JavaScriptでCSSプロパティを削除する方法

element. styleプロパティを使用するこの方法は、個々の要素のスタイルを直接操作する場合に便利です。classListプロパティを使用するこの方法は、CSSクラスを使用してスタイルを定義している場合に便利です。このクラスには、定義されているすべてのCSSプロパティが削除されます。...


たった3ステップで分かる!JavaScript オブジェクト配列から特定の値を持つオブジェクトを取得する方法

このチュートリアルを理解するには、以下の知識が必要です。JavaScriptの基本構文オブジェクトと配列オブジェクトの配列があり、その中から特定のプロパティ値を持つオブジェクトを取得したい場合があります。例えば、以下のようなオブジェクト配列があるとします。...


【初心者向け】JavaScript非同期処理を完全マスター!Promise、async/await徹底解説

この度は、JavaScript、Node. js、そして非同期処理における重要な概念である「async関数」と「Promise」について、**「async関数は何故暗黙的にPromiseを返すのか?」**という疑問に焦点を当て、分かりやすく解説させていただきます。...