JavaScriptのNumber(数値)型とは
NumberはJavaScriptで正負の整数、浮動小数点、2 進数、8 進数、16 進数、指数に使用されるプリミティブなデータ型です。
JavaScriptのNumber型は、C#やJavaのdoubleと同様に倍精度64bitバイナリ形式です。国際標準のIEEE754に準拠しています。
数値型の最初の文字は整数値でなければならず、引用符で囲んではいけません。
以下のコード例は、JavaScriptで異なる数値型を持つ変数を示しています。
let num1 = 100; // integer
let num2 = -100; //negative integer
let num3 = 10.52; // float
let num4 = -10.52; //negative float
let num5 = 0xfff; // hexadecimal
let num6 = 256e-5; // exponential
let num7 = 030; // octal
let num8 = 0b0010001; // binary
Integer(整数)
数値には正の整数と負の整数があり、JavaScriptでは、整数の値は15桁までとなってます。
16桁以降の整数値は変更されたり、切り上げられたりするので、15桁以上の整数値にはBigIntを使います。
//16桁の整数
let int1 = 1234567890123456; //accurate
//17桁の整数
let int2 = 12345678901234569; //will be 12345678901234568
//16桁の整数
let int3 = 9999999999999998; //will be 9999999999999998
//16桁の整数、最後の桁は9
let int4 = 9999999999999999; //will be 10000000000000000
BigInt
BigInt型は、任意の精度で整数を格納できる数値プリミティブ型です。
15桁以上の大きな整数にはBigIntを使用します。また、整数の末尾にnをつけるとBigIntになります。
//16桁の整数
let int1 = 1234567890123459n; //will be 1234567890123459
//17桁の整数
let int2 = 12345678901234569n; //will be 12345678901234569
//20桁の整数
let int3 = 9999999999999999999n; //will be 9999999999999999999
浮動小数点数
JavaScriptの浮動小数点数は、小数点以下17桁までしか精度を保つことができず、それを超えると値が変わってしまいます。
//小数点以下17桁
let f1 = 123456789012345.9; //accurate
//小数点以下18桁
let f2 = 1234567890123456.9; //will be 1234567890123457
//小数点以下19桁
let f3 = 1234567890123456.79; //will be 1234567890123456.8
JavaScriptの浮動小数点数に対する算術演算は、必ずしも正確ではありません。
let f1 = 5.1 + 5.2; //will be 10.3
let f2 = 10.1 + 10.2; //will be 20.299999999999997
let f3 = (10.1*100 + 10.2*100)/100; //instead of 10.1 + 10.2
数値文字列を算術演算(加算を除く)すると、以下のように数値が得られます。
let numStr1 = "5", numStr2 = "4";
let multiplication = numStr1 * numStr2; // 20
let division = numStr1 / numStr2; // 1.25
let modulus = numStr1 % numStr2; // 1
仮に値の一方が数字であっても、結果は同じです。
let num = 5, str = "4";
let multiplication = num * str; // 20
let division = num / str; // 1.25
let modulus = num % str; // 1
「+」演算子は、1つの値がリテラル文字列の場合、連結します。
let num = 5, str = "4";
let result = num + str; // "54"
2進法、8進法、16進法、指数法
- 2進数:0bまたは0Bで始まり、0または1が続くこと。
- 8進数:0とアルファベットの’O’、0oまたは0Oから始まります。
- 16進数:0から始まり、0xまたは0Xのアルファベット(X)を含むこと。
- 指数関数的な数字:bは基本整数または浮動小数点数、eはe文字、Nは指数関数的なべき乗数で、beN形式に従う。
let b = 0b100; // binary
let oct = 0o544; // octal
let hex = 0x123456789ABCDEF; // hexadecimal
let exp = 256e-5; // exponential
JavaScriptのNumber()関数
Number()は、JavaScriptのコンストラクタ関数で、他の型の値を数値に変換するものです。
let i = Number('100');
let f = Number('10.5');
let b = Number('0b100');
typeof(i); // returns number
typeof(f); // returns number
typeof(b); // returns number
Number() 関数で new 演算子を使用すると、数字を扱うための定数とメソッドを含むオブジェクトが返されます。
let i = new Number('100');
let f = new Number('10.5');
let b = new Number('0b100');
typeof(i); // returns object
typeof(f); // returns object
typeof(b); // returns object
数値の比較
演算子==や==を使った数値の比較には注意が必要です。
演算子はオブジェクトの参照を比較し、値を比較しないのに対して、===演算子は値を比較します。
以下のコード例では、異なる方法で作成された数値を比較しています。
let num1 = new Number(100);
let num2 = Number('100');
let num3 = 100;
num1 == num2; // true
num1 === num2; // false
num2 == num3; //true
num2 === num3; // true
num1 == num3; //true
num1 === num3; //false
Numberプロパティ
Number型には、いくつかのデフォルトのプロパティがあります。
JavaScript はプリミティブな値をオブジェクトとして扱いますので、すべてのプロパティとメソッドはリテラルな数値と数値オブジェクトの両方に適用できます。
以下の表は、Number 型のすべてのプロパティの一覧です。
プロパティ | 説明 |
MAX_VALUE | JavaScript でサポートされている数値の最大値を返します。 |
MIN_VALUE | JavaScript でサポートされている最小の数値を返します。 |
NEGATIVE_INFINITY | 負の無限大を返します。 |
NaN | 数値でない値を表す。 |
POSITIVE_INFINITY | 正の無限大を表す。 |
Number.MAX_VALUE; //1.7976931348623157e+308
Number.MIN_VALUE; //5e-324
Number.NEGATIVE_INFINITY; //-Infinity
Number.POSITIVE_INFINITY; //Infinity
Number.NaN;//NaN
Numberメソッド
次の表は、Number 型のすべてのメソッドの一覧です。
メソッド | 説明 |
toExponential(端数桁数) | 指数関数の値を文字列で返します。 |
toFixed(端数桁数) | 端数桁数 で指定された数値の10進数値を文字列で返します。 |
toLocaleString() | ブラウザのロケール設定に応じた数値を文字列値として返す。 |
toPrecision(精度数) | B関数は、指定された総桁数を持つ数値を文字列として返します。 |
toString() | 数値を文字列にした値を返します。 |
valueOf() | Numberオブジェクトの値を返します。 |
toExponential()
let num = 100; Num.toExponential(2); // '1.00e+2'
toFixed()
let num = 100; Num.toFixed(2); // '100.00'
toLocaleString()
let num = 100; Num.toLocaleString(); // '100'
toPrecision()
let num = 100; Num.toPrecision(4); // '100.0'
toString()
let num = 100; Num.toString(); // '100'
valueOf()
let num = new Number(100); Num.valueOf(); // '100'