数値

数値 の JavaScript

20個の演習

数値について

JavaScriptの数値には、2つの異なる種類があります。数値と「bigint」です。

数値は最もよく使われるもので、倍精度64ビット浮動小数点形式で数値データ型を表します。

  • number: 倍精度64ビット浮動小数点形式(IEEE 754)の数値データ型です。 例として、-6、-2.4、0、0.1、1、3.14、16.984025、25、976、1024.0、500000があります。
  • bigint: 任意精度形式の_整数_を表せる数値データ型です。 例として、-12n、0n、4n、9007199254740991nがあります。
let numericValue = 42;
// => 42

42のような数値リテラルは、JavaScriptのコードでは整数ではなく浮動小数点値です。日常的に使う独立した整数型は存在しません。bigint型は、日常的な用途でnumber型を置き換えるために設計されたものではありません。42は依然としてNumberであり、BigIntではありません。

数値は、0b101、0o13、0x0Aのようなリテラル形式で表すこともできます。数値リテラルの文法についてはこちらで詳しく学べます。

特殊な表記

指数表記

E表記は、10のべき乗を掛けた数値を表します。E表記の形式は、数値の後にeまたはEを書き、その後に掛ける10のべき乗を続けます。

const num = 3.125e7;
// => 31250000
// The notation essentially says, "Take 3.125 and multiply it by 10^7".

E表記は、非常に小さな数を表すのにも使えます。

const num = 325987e-6; // Equals 0.325987
// The notation essentially says, "Take 325987 and multiply it by 10^-6.

アンダースコア表記

アンダースコアを使うと、大きな数値を読みやすくできます。コンパイラーはアンダースコアを完全に無視します。

const num = 1_000_000; // You can read this as 1,000,000
console.log(num);
// => 1000000

組み込みオブジェクト

数値を扱うときに役立つ組み込みオブジェクトが2つあります。

Mathには数値を丸めるメソッドもあります。利用できる丸めの選択肢については、このjavascript.infoの丸めに関する記事で詳しく読めます。

Math.floor(234.34); // => 234
Math.ceil(234.34); // => 235

Number組み込みグローバルobjectは、数値のような_ほとんどすべての_ものをnumberに変換するために使えるグローバルfunctionでもあります。stringをnumberに_パースする_よりも融通が利きません。

const date = new Date('December 17, 1995 03:24:00');
const unix = Number(date);

unix;
// => 819199440000

JavaScriptの数値には、3つの種類の最大値(および最小値/負の最大値)があります。

  • VALUE: Number.MAX_VALUEとNumber.MIN_VALUEで与えられます。
  • INFINITY: Number.POSITIVE_INFINITYとNumber.NEGATIVE_INFINITYで与えられます。
  • SAFE_INTEGER: Number.MAX_SAFE_INTEGERとNumber.MIN_SAFE_INTEGERで与えられます。

JavaScriptでの数値の実装方法のため、Number.MIN_VALUEとNumber.MAX_VALUEの間のすべての数値が表せるわけではありません。しかし、Number.MIN_SAFE_INTEGER - 1とNumber.MAX_SAFE_INTEGER + 1の間の_すべて_の数値は表せます。

特殊な数値

JavaScriptにはいくつかの特殊な数値があります。

  • 2つのエラー値、NaNとInfinityです。
  • ゼロを表す2つの値、+0と-0です。

NaN - 非数

エラー値NaN(「Not a Number」の略、すなわち非数)は、次のような場合に生成されます。

  • 数値をパースできなかった場合:
    Number('123'); // => 123
    Number('Hello, World!'); // => NaN
    
  • 演算が失敗した場合:
    Math.sqrt(-64); // => NaN
    
  • オペランドの1つがNaNである場合:
    NaN + 69; // => NaN
    

NaNは自分自身と等しくない唯一の値です。

NaN === NaN; // => false

ある値がNaNかどうかを確認したい場合は、グローバル関数isNaN()を使う必要があります。

isNaN(NaN); // => true
isNaN(123); // => false

Infinity

Infinityは、2つの問題のうちの1つを示すエラー値です。

  • 大きさが大きすぎて数値を表せない場合。
    Math.pow(2, 1024); // => Infinity
    
  • ゼロで除算が行われた場合。
    6 / 0; // => Infinity
    -6 / 0; // => -Infinity
    

Infinityは(NaNを除いて)他のどの数値よりも大きくなります。同様に、-Infinityは(NaNを除いて)他のどの数値よりも小さくなります。

グローバル関数isFinite()を使うと、ある値が実際の数値かどうか(無限でもNaNでもないか)を確認できます。

isFinite(80085); // => true
isFinite(Infinity); // => false
isFinite(NaN); // => false

2つのゼロ

+0と-0はJavaScriptでは別々の数値です。これらは、0と区別がつかないほど小さな数値を表したときに生成されることがあります。符号付きゼロを使うと、「どちらの方向から」ゼロに近づいたかを記録できます。つまり、その数値がゼロとみなされる前にどの符号だったかということです。ゼロは1つしかないものとして扱うのが最善です。

比較

数値は、同じ値であれば等しいとみなされます。

1 == 1.0;
// => true

1 === 1.0;
// => true
// Remember, all numbers are floating-points, so this is
// different syntax for the exact same value.

1 === 1n;
// => false
// Strictly checking a number against a bigint will always result
// in false.

JavaScriptにおける比較全般と数値の比較については、比較を参照してください。

落とし穴

JavaScriptの数値は浮動小数点数なので、これらの値を使った計算はすべて浮動小数点演算になります。したがって、JavaScriptでは次のようになります。

0.1 + 0.2 === 0.3;
// => false

簡潔な説明は0.30000000000000004.comを、詳細な説明はOracleのNumerical Computation Guide「What Every Computer Scientist Should Know About Floating-Point Arithmetic」の付録Dを参照してください。

GitHubで編集 リンクは新しいウィンドウまたはタブで開きます

数値を学習する

練習はロックされています

数値を練習するには、あと1個の演習のロックを解除してください