数値について(Number)
数値型について
■数値型について
■数値のデータ型について
数値は、プリミティブ型となります。
基本的で単純なデータ型です。
■数値型の精度について
数値型の精度は、64bit浮動小数点数(IEEE 754)です。
■論理演算の精度について
論理演算や、シフト演算を行った場合、一時的に、32bit整数値として計算されます。
符号の解釈は、使用した演算子によって変化します。
■Number クラスについて
Number クラスは、数値用のクラスです。
■数値から Number クラスのプロパティやメソッドを利用する
数値の後に、ドット演算子や配列アクセス演算子を記述すると、その瞬間だけ Number オブジェクトに変換されます。
数値に対して、あたかも Number クラスのプロパティやメソッドが存在するかのように、アクセスできます。
プロパティの追加を試みてもエラーは発生しませんが、永続しないため無意味です。
数値を作成する
■Number コンストラクタについて
new Number ( 値情報 ) :Object
第01引数(略可) | Number | オブジェクト内に値情報 [[PrimitiveValue]] を保有したい場合に指定する。 |
戻り値 | Object | Object オブジェクト |
数値を指定して、オブジェクトを作成する
// ------------------------------------------------------------
// Number オブジェクトを作成する(数値の作成ではない)
// ------------------------------------------------------------
var obj = new Number(123.456);
// データ型を確認する(オブジェクトの一種である)
console.log(typeof(obj)); // "object"
// 値情報を取得する
console.log(obj.valueOf()); // 123.456
// 文字列情報を取得する
console.log(obj.toString()); // "123.456"
// ------------------------------------------------------------
// 数値型のデータを指定して、オブジェクトを作成
// ------------------------------------------------------------
var obj = new Object(123.456);
// データ型を確認する(オブジェクトの一種である)
console.log(typeof(obj)); // "object"
// 値情報を取得する
console.log(obj.valueOf()); // 123.456
// 文字列情報を取得する
console.log(obj.toString()); // "123.456"
■数値リテラルについて
数値を作成するには、数値リテラルを使用します。
整数、小数、指数の表現が可能です。
整数を作成する
// 整数を作成する
var value0 = 123;
var value1 = -987;
小数を作成する
// 小数を作成する
var value0 = 123.456;
var value1 = -0.987;
指数を作成する
// 指数を作成する
var value0 = 0.12345e+4;
var value1 = -12345e-4;
■ヘキサリテラルについて
最先頭に『 0x 』 と記述した場合、16 進数表記が可能です。
16 進数表記で数値を作成する
// 16 進数表記で数値を作成する
var value0 = 0x00000012;
var value1 = 0x89abcedf;
// 出力テスト
console.log(value0); // 18
console.log(value1); // 2309738207
■オクタルリテラルについて(非推奨仕様)
最先頭に『 0 』 と記述した場合、8 進数表記が可能です。
これは非推奨な仕様であり、strict モードでは、利用できません。
8 進数表記で数値を作成する(非推奨)
// 8 進数表記で数値を作成する(非推奨)
var value0 = 012;
var value1 = 07654;
// 出力テスト
console.log(value0); // 10
console.log(value1); // 4012
■オクタルリテラルについて(新仕様)
最先頭に『 0o 』 と記述した場合、8 進数表記が可能です。
これは新しい仕様であり、一部のブラウザで動作します。
8 進数表記で数値を作成する
// 8 進数表記で数値を作成する
var value0 = 0o0012;
var value1 = 0o7654;
// 出力テスト
console.log(value0); // 10
console.log(value1); // 4012
■バイナリリテラルについて
最先頭に『 0b 』 と記述した場合、2 進数表記が可能です。
バイナリリテラルは、一部のブラウザで動作します。
2 進数表記で数値を作成する
// 2 進数表記で数値を作成する
var value0 = 0b00000010;
var value1 = 0b01010111;
// 出力テスト
console.log(value0); // 2 (0x02)
console.log(value1); // 87 (0x57)
Number クラスのプロパティについて
■Number クラスのプロパティ
Number クラスには、以下の定数プロパティがあります。
プロパティ | 型 | 説明 |
Number. | Number | 表現可能な最小値(64bit浮動小数点数の最小値) |
Number. | Number | 表現可能な最大値(64bit浮動小数点数の最大値) |
Number. | Number | 負の無限大を意味する定数(-Infinity 値) |
Number. | Number | 正の無限大を意味する定数( Infinity 値) |
Number. | Number | 非数(数値以外)を意味する定数(NaN 値) |
■Number.NaN 定数について
Number.NaN は、非数(NaN 値)が格納されている定数です。
非数(Not a Number)は、数値以外のデータという意味があります。
NaN 値自体は、数値型の一種となります。
大抵の場合、数値に関する演算に失敗した結果として得られます。
非数は、比較演算子『 == 』を使って調べる事はできません。
任意のデータが、非数(数値以外)であるか調べたい場合、isNaN() 関数を使用します。
非数(数値以外)であるか調べる。
// ------------------------------------------------------------
// 非数は比較できない
// ------------------------------------------------------------
var result = (Number.NaN === NaN);
console.log(result); // false
// ------------------------------------------------------------
// 非数であるか調べる
// ------------------------------------------------------------
var result = isNaN(Number.NaN);
console.log(result); // true
Number クラスのメソッドについて
■Number クラスのメソッド一覧
Number クラスには、以下のメソッドがあります。
メソッド | 説明 |
toString() | 数値を、任意進数表記の文字列に変換する。 |
toExponential() | 数値を、指数表記の文字列に変換する。 |
toFixed() | 数値を、小数表記の文字列に変換する。(0埋めあり) |
toPrecision() | 数値を、指定桁数の精度に丸めた文字列に変換する。(0埋めあり) |
■ECMAScript 6
メソッド | 説明 |
Number.isNaN() | 任意のデータが、非数(NaN 値)と厳密に一致するか調べる。 |
Number.isFinite() | 任意のデータが、有限な数値型であるかを調べる。 |
Number.isInteger() | 任意のデータが、整数値であるか調べる。 |
Number.parseInt() | 文字列を先頭から解析して、整数値に変換する。 |
Number.parseFloat() | 文字列を先頭から解析して、小数値に変換する。 |
■toString() メソッド
数値を、任意進数表記の文字列に変換するには、toString() メソッドを使用します。
Number.toString ( n 進数 ) :String
第01引数(略可) | Number | 2 ~ 36 までの任意の進数を指定。省略した場合 10。 |
戻り値 | String | 進数表記に変換した文字列が得られる。 |
■取得例
数値を、任意の進数表記に変換する
// 数値を作成する
var value = 123;
// 2進数表記
console.log( value.toString(2) ); // "1111011"
// 8進数表記
console.log( value.toString(8) ); // "173"
// 10進数表記
console.log( value.toString(10) ); // "123"
// 16進数表記
console.log( value.toString(16) ); // "7b"
■toExponential() メソッド
数値を、指数表記の文字列に変換するには、toExponential() メソッドを使用します。
小数の桁が足りない場合、近似値が得られます。
小数の桁が余る場合、0 で埋められます。
Number.toExponential ( 小数の桁数 ) :String
第01引数(略可) | Number | 0 ~ 20 までの小数の桁数を指定。省略した場合、最適な桁数。 |
戻り値 | String | 指数表記に変換した文字列が得られる。 |
■取得例
数値を、指数表記に変換する
// ------------------------------------------------------------
// 数値を作成する
// ------------------------------------------------------------
var value = 123456789;
// ------------------------------------------------------------
// 指数表記に変換する(引数省略)
// ------------------------------------------------------------
console.log( value.toExponential() ); // "1.23456789e+8"
// ------------------------------------------------------------
// 指数表記に変換する(引数指定)
// ------------------------------------------------------------
console.log( value.toExponential(1) ); // "1.2e+8"
console.log( value.toExponential(5) ); // "1.23457e+8"
console.log( value.toExponential(10) ); // "1.2345678900e+8"
console.log( value.toExponential(15) ); // "1.234567890000000e+8"
console.log( value.toExponential(20) ); // "1.23456789000000000000e+8"
■toFixed() メソッド
数値を、小数表記の文字列に変換するには、toFixed() メソッドを使用します。
小数の桁が足りない場合、近似値が得られます。
小数の桁が余る場合、0 で埋められます。
Number.toFixed ( 小数の桁数 ) :String
第01引数(略可) | Number | 0 ~ 20 までの小数の桁数を指定。省略した場合 0 |
戻り値 | String | 小数表記に変換した文字列が得られる。 |
■取得例
数値を、指数表記に変換する
// ------------------------------------------------------------
// 数値を作成する
// ------------------------------------------------------------
var value = 123.456789;
// ------------------------------------------------------------
// 小数表記文字列に変換する
// ------------------------------------------------------------
console.log( value.toFixed( ) ); // "123"
console.log( value.toFixed(4) ); // "123.4568"
console.log( value.toFixed(8) ); // "123.45678900"
console.log( value.toFixed(12) ); // "123.456789000000"
■toPrecision() メソッド
数値を、指定桁数の精度に丸めた文字列に変換するには、toPrecision() メソッドを使用します。
整数部分の情報が失われる場合、指数表記となります。
整数部分の情報が失われない場合、小数表記となります。
桁が足りない場合、近似値が得られます。
桁が余る場合、0 で埋められます。
Number.toPrecision ( 桁数 ) :String
第01引数(略可) | Number | 1 ~ 21 までの桁数を指定。省略した場合、そのまま出力。 |
戻り値 | String | 指定したの桁数精度に丸めた文字列が得られる。 |
■取得例
数値を、指定桁数の精度に丸めた文字列に変換する
// ------------------------------------------------------------
// 数値を作成する
// ------------------------------------------------------------
var value = 12345.6789;
// ------------------------------------------------------------
// 指定桁数の精度に丸めた文字列に変換する(引数省略)
// ------------------------------------------------------------
console.log( value.toPrecision() ); // "12345.6789"
// ------------------------------------------------------------
// 指定桁数の精度に丸めた文字列に変換する(引数指定)
// ------------------------------------------------------------
console.log( value.toPrecision(1) ); // "1e+4"
console.log( value.toPrecision(3) ); // "1.23e+4"
console.log( value.toPrecision(6) ); // "12345.7"
console.log( value.toPrecision(9) ); // "12345.6789"
console.log( value.toPrecision(12) ); // "12345.6789000"
console.log( value.toPrecision(15) ); // "12345.6789000000"
■Number.isNaN() メソッド
任意のデータが、非数(NaN)と厳密に一致するか調べるには、Number.isNaN() メソッドを使用します。
このメソッドは、一部の ECMAScript 6 対応ブラウザでのみ動作します。
非数は、比較演算子『 == 』を使って調べる事はできません。
Number.isNaN ( * ) :Boolean
第01引数(略可) | * | 任意のデータを指定。 |
戻り値 | Boolean | 非数(NaN)と厳密に一致する場合のみ true が得られる。それ以外は false が得られる。 |
■isNaN() 関数との違い
Number.isNaN() メソッドは、指定したデータを数値型に変換しません。
そして、NaN 値と厳密に等しいかを評価します。
よって、数値型以外のデータを指定した場合、必ず false が得られます。
isNaN() 関数と Number.isNaN() メソッドの結果の違いを確認する
// ------------------------------------------------------------
// 数値として変換できないので非数(数値以外)である
// ------------------------------------------------------------
var result = isNaN("あいうえお");
console.log(result); // true
// ------------------------------------------------------------
// NaN 値と厳密一致しないので false である
// ------------------------------------------------------------
var result = Number.isNaN("あいうえお");
console.log(result); // false
■取得例
任意のデータが、非数(NaN 値)と厳密に一致するか調べる
// ------------------------------------------------------------
// 数値
// ------------------------------------------------------------
var result = Number.isNaN(123);
console.log(result); // false
// ------------------------------------------------------------
// 文字列
// ------------------------------------------------------------
var result = Number.isNaN("123");
console.log(result); // false
// ------------------------------------------------------------
// 非数(NaN 値)
// ------------------------------------------------------------
var result = Number.isNaN(Number.NaN);
console.log(result); // true
■Number.isFinite() メソッド
任意のデータが、有限な数値型であるかを調べるには、Number.isFinite() メソッドを使用します。
有限な数値型とは、『 Infinity と NaN 』以外のすべての数値型です。
このメソッドは、一部の ECMAScript 6 対応ブラウザでのみ動作します。
Number.isFinite( * ) :Boolean
第01引数(略可) | * | 任意のデータを指定。 |
戻り値 | Boolean | 有限な数値型である場合 true が得られる。それ以外なら false が得られる。 |
■isFinite() 関数との違い
isFinite() 関数は、指定したデータを数値型に変換しようとします。
Number.isFinite() メソッドは、指定したデータを数値型に変換しません。
よって、数値型以外のデータを指定した場合、必ず false が得られます。
isFinite() 関数と Number.isFinite() メソッドの結果の違いを確認する
// ------------------------------------------------------------
// 有限な数値と解釈できるので true である
// ------------------------------------------------------------
var result = isFinite("123");
console.log(result); // true
// ------------------------------------------------------------
// 文字列なので false である
// ------------------------------------------------------------
var result = Number.isFinite("123");
console.log(result); // false
■取得例
任意のデータが、有限な数値型であるか調べる
// ------------------------------------------------------------
// 数値
// ------------------------------------------------------------
var result = Number.isFinite(123);
console.log(result); // true
// ------------------------------------------------------------
// 正の無限大
// ------------------------------------------------------------
var result = Number.isFinite(Number.POSITIVE_INFINITY);
console.log(result); // false
// ------------------------------------------------------------
// 負の無限大
// ------------------------------------------------------------
var result = Number.isFinite(Number.NEGATIVE_INFINITY);
console.log(result); // false
// ------------------------------------------------------------
// 非数(数値ではない)
// ------------------------------------------------------------
var result = Number.isFinite(Number.NaN);
console.log(result); // false
// ------------------------------------------------------------
// 数値型以外のでデータを指定した時点ですべて失敗する
// ------------------------------------------------------------
console.log(Number.isFinite("123")); // false
console.log(Number.isFinite("")); // false
console.log(Number.isFinite(null)); // false
console.log(Number.isFinite(undefined)); // false
console.log(Number.isFinite(false)); // false
■Number.isInteger() メソッド
任意のデータが、整数値であるかを調べるには、Number.isInteger() メソッドを使用します。
Number.isInteger() メソッドは、指定したデータを数値型に変換しません。
このメソッドは、一部の ECMAScript 6 対応ブラウザでのみ動作します。
Number.isInteger( * ) :Boolean
第01引数(略可) | * | 任意のデータを指定。 |
戻り値 | Boolean | 整数である場合 true が得られる。それ以外なら false が得られる。 |
■取得例
任意のデータが、整数値であるか調べる
// ------------------------------------------------------------
// 整数値
// ------------------------------------------------------------
var result = Number.isInteger(123);
console.log(result); // true
// ------------------------------------------------------------
// 小数値
// ------------------------------------------------------------
var result = Number.isInteger(123.456);
console.log(result); // false
// ------------------------------------------------------------
// 非数(数値ではない)
// ------------------------------------------------------------
var result = Number.isInteger(Number.NaN);
console.log(result); // false
■Number.parseInt() メソッド
文字列を先頭から解析して、整数値に変換するには、Number.parseInt() メソッドを使用します。
先頭に、空白やタブや改行が存在する場合、スキップします。
途中で整数値以外の情報が含まれる場合、その時点で解析を終了します。(切り捨て)
変換に失敗した場合、非数となります。
第02引数を省略した場合、16 進数表記 (0xDDDD) を、16 進数と解釈します。
このメソッドは、一部の ECMAScript 6 対応ブラウザでのみ動作します。
互換性を考慮する場合、parseInt() 関数を使用します。
Number.parseInt ( * , n 進数 ) :Number
第01引数(略可) | * | 任意のデータを指定。 |
第02引数(略可) | Number | 2 ~ 36 までの任意の進数を指定。省略した場合 0。 |
戻り値 | Number | 整数として評価した結果が得られる。失敗した場合、非数が得られる。 |
Number.parseInt() メソッドを使って、整数値に変換する
// 文字列を作成する
var str = "123.456";
// 整数値に変換する
var value = Number.parseInt(str);
// 出力テスト
console.log(value); // 123
console.log(typeof(value)); // "number"
16 進数文字列を、整数値に変換する
// 16 進数文字列を、整数値に変換する
var value = Number.parseInt("0x0000007f");
// 出力テスト
console.log(value); // 127 (0x7f)
2 進数文字列を、整数値に変換する
// 2 進数文字列を、整数値に変換する
var value = Number.parseInt("01001111" , 2);
// 出力テスト
console.log(value); // 79 (0x4f)
■Number.parseFloat() メソッド
文字列を先頭から解析して、小数値に変換するには、Number.parseFloat() メソッドを使用します。
先頭に、空白やタブや改行が存在する場合、スキップします。
途中で小数値以外の情報が含まれる場合、その時点で解析を終了します。
変換に失敗した場合、非数となります。
このメソッドは、一部の ECMAScript 6 対応ブラウザでのみ動作します。
互換性を考慮する場合、parseFloat() 関数を使用します。
Number.parseFloat ( * ) :Number
第01引数(略可) | * | 任意のデータを指定。 |
戻り値 | Number | 小数値として評価した結果が得られる。失敗した場合、非数が得られる。 |
Number.parseFloat() メソッドを使って、小数値に変換する
// 文字列を作成する
var str = "123.456";
// 小数値に変換する
var value = Number.parseFloat(str);
// 出力テスト
console.log(value); // 123.456
console.log(typeof(value)); // "number"
数値用のグローバル関数について
■数値用のグローバル関数一覧
メソッド | 説明 |
parseInt() | 文字列を先頭から解析して、整数値に変換する。 |
parseFloat() | 文字列を先頭から解析して、小数値に変換する。 |
isNaN() | 任意のデータが、非数(数値以外)であるか調べる。 |
isFinite() | 任意のデータが、有限な数値であるか調べる。 |
■isNaN() 関数
■任意のデータが、非数(数値以外)であるか調べるには?
isNaN() 関数を使用します。
数値型へ変換を試みてから、評価されます。
isNaN ( * ) :Boolean
第01引数(略可) | * | 任意のデータを指定。 |
戻り値 | Boolean | 非数(数値以外)である場合 true が得られる。それ以外の数値なら false が得られる。 |
■ isNaN() 関数の欠陥について
「false」「""」「null」は、『非数』であることが期待されます。
しかし、isNaN() 関数では『数値』だと真逆に評価します。
これは、数値型へ変換される際に、「0」となる為です。
■ NaN 値と厳密に一致するか調べるには?
Number.isNaN() メソッドを使用します。
非数は、比較演算子『 == 』を使って調べる事はできません。
■取得例
任意のデータが、非数(数値以外)であるか調べる
// ------------------------------------------------------------
// 数値
// ------------------------------------------------------------
var result = isNaN(123);
console.log(result); // false
// ------------------------------------------------------------
// 数値に変換可能な文字列
// ------------------------------------------------------------
var result = isNaN("123");
console.log(result); // false
// ------------------------------------------------------------
// 数値に変換不能な文字列
// ------------------------------------------------------------
var result = isNaN("あいうえお");
console.log(result); // true
// ------------------------------------------------------------
// 非数(数値ではない)
// ------------------------------------------------------------
var result = isNaN(Number.NaN);
console.log(result); // true
var result = isNaN(undefined);
console.log(result); // true
// ------------------------------------------------------------
// 数値と評価されてしまう非数
// ------------------------------------------------------------
var result = isNaN(false);
console.log(result); // false
var result = isNaN("");
console.log(result); // false
var result = isNaN(null);
console.log(result); // false
■isFinite() 関数
■任意のデータが、有限な数値であるか調べるには?
isFinite() 関数を使用します。
有限な数値とは、『 Infinity と NaN 』以外のすべての数値です。
isFinite( * ) :Boolean
第01引数(略可) | * | 任意のデータを指定。 |
戻り値 | Boolean | 有限な数値である場合 true が得られる。それ以外なら false が得られる。 |
■数値型に変換したくない場合は?
Number.isFinite() メソッドを使用します。
■取得例
任意のデータが、有限な数値であるか調べる
// ------------------------------------------------------------
// 数値
// ------------------------------------------------------------
var result = isFinite(123);
console.log(result); // true
// ------------------------------------------------------------
// 正の無限大
// ------------------------------------------------------------
var result = isFinite(Number.POSITIVE_INFINITY);
console.log(result); // false
// ------------------------------------------------------------
// 負の無限大
// ------------------------------------------------------------
var result = isFinite(Number.NEGATIVE_INFINITY);
console.log(result); // false
// ------------------------------------------------------------
// 非数(数値ではない)
// ------------------------------------------------------------
var result = isFinite(Number.NaN);
console.log(result); // false
var result = isFinite(undefined);
console.log(result); // false
// ------------------------------------------------------------
// 数値と評価されてしまう非数
// ------------------------------------------------------------
var result = isFinite("");
console.log(result); // true
var result = isFinite(null);
console.log(result); // true
文字列から数値型に変換する
■Number() 関数を使用する
任意のデータを、数値型に変換するには、Number() 関数を使用します。
変換に失敗した場合、非数となります。
Number ( * ) :Number
第01引数(略可) | * | 任意のデータを指定。 |
戻り値 | Number | 数値型に変換した結果が得られる。失敗した場合、非数が得られる。 |
Number() 関数を使って、数値型に変換する
// 文字列を作成する
var str = "123.456";
// 数値型に変換する
var value = Number(str);
// 出力テスト
console.log(value); // 123.456
console.log(typeof(value)); // "number"
■単項加算演算子を使用する
任意のデータに、単項加算演算子 『 + 』 を記述すると、数値型に変換する事ができます。
変換に失敗した場合、非数となります。
単項加算演算子を使って、数値型に変換する
// 数値を作成する
var str = "123.456";
// 単項加算演算子を使って、数値型に変換する
var value = +str;
// 出力テスト
console.log(value); // 123.456
console.log(typeof(value)); // "number"
■parseInt() 関数を使用する (整数値に変換)
文字列を先頭から解析して、整数値に変換するには、parseInt() 関数を使用します。
先頭に、空白やタブや改行が存在する場合、スキップします。
途中で整数値以外の情報が含まれる場合、その時点で解析を終了します。(切り捨て)
変換に失敗した場合、非数となります。
第02引数を省略した場合、16 進数表記 (0xDDDD) を、16 進数と解釈します。
8 進数表記 (0DDDD) の解釈は、IE9 以降から廃止されています。
parseInt ( * , n 進数 ) :Number
第01引数(略可) | * | 任意のデータを指定。 |
第02引数(略可) | Number | 2 ~ 36 までの任意の進数を指定。省略した場合 0 |
戻り値 | Number | 整数として評価した結果が得られる。失敗した場合、非数が得られる。 |
parseInt() 関数を使って、整数値に変換する
// 文字列を作成する
var str = "123.456";
// 整数値に変換する
var value = parseInt(str);
// 出力テスト
console.log(value); // 123
console.log(typeof(value)); // "number"
16 進数文字列を、整数値に変換する
// 16 進数文字列を、整数値に変換する
var value = parseInt("0x0000007f");
// 出力テスト
console.log(value); // 127 (0x7f)
2 進数文字列を、整数値に変換する
// 2 進数文字列を、整数値に変換する
var value = parseInt("01001111" , 2);
// 出力テスト
console.log(value); // 79 (0x4f)
■parseFloat() 関数を使用する (小数値に変換)
文字列を先頭から解析して、小数値に変換するには、parseFloat() 関数を使用します。
先頭に、空白やタブや改行が存在する場合、スキップします。
途中で小数値以外の情報が含まれる場合、その時点で解析を終了します。
変換に失敗した場合、非数となります。
parseFloat ( * ) :Number
第01引数(略可) | * | 任意のデータを指定。 |
戻り値 | Number | 小数値として評価した結果が得られる。失敗した場合、非数が得られる。 |
parseFloat() 関数を使って、小数値に変換する
// 文字列を作成する
var str = "123.456";
// 小数値に変換する
var value = parseFloat(str);
// 出力テスト
console.log(value); // 123.456
console.log(typeof(value)); // "number"