JavaScript 再入門(その4) 数値型 Number型 と BigInt型

数値型 Number型 と BigInt型

数値型データ

JavaScriptで数値を扱うデータは Number型 と BigInt型*ES2020 の2つがあります。
Number型(数値型) は符号付整数ではなく倍精度浮動小数点数となります。
BigInt型(長整数型) は Number型 を超える整数を扱うことができます。

var val1 = 3 / 2;
console.log( val1,typeof(val1) ); // 1.5 'number'

組み込みオブジェクト Math を使って高度な数学関数や定数を扱うこともできます。
Math は BigInt 型では動作しません。

var val1 = 1.54 ;
console.log( Math.floor(val1) ); // 切り捨て 1
console.log( Math.ceil(val1) ); // 切り上げ 2
console.log( Math.round(val1) ); // 四捨五入 2

少数以下の桁指定をする場合

var val1 = 1.54 ;
var n = 1 ;
console.log(Math.floor( val1 * Math.pow(10,n) ) / Math.pow(10,n) ); // 切り捨て 1.5
console.log(Math.ceil( val1 * Math.pow(10,n) ) / Math.pow(10,n) ); // 切り上げ 1.6
console.log(Math.round( val1 * Math.pow(10,n) ) / Math.pow(10,n) ); // 四捨五入 1.5

0xから始まる数字は16進数として扱われます

var val1 = 0x10 / 2;
console.log( val1 , typeof(val1) ); // 8 'number'

Number.isSafeInteger *ES2015 を使えば数値が倍精度浮動小数点数の範囲内にあるかを確認できます。

console.log( Number.isSafeInteger( Math.pow(2,53) )) ; // false
console.log( Number.isSafeInteger( Math.pow(2,53) - 1 )) ; // true

数値型への型変換

文字列を数字に変換するには parseInt / parseFloat を使います。
parseInt の第2引数は基数( 2進数は2, 8進数は8, 10進数は10, 16進数は16 )です、デフォルトは10です。
paeseFloat の基数は10です。

console.log( parseInt('-1234.56',10) ); // -1234
console.log( parseFloat('-1234.56') ); // -1234.56

‘0x’で始まる文字列は16進数として変換されます。

console.log( parseInt('0xac',16) ); // 172
console.log( parseInt('ac',16) ); // 172

単項演算子 + を使って数値に変換することもできます。

console.log( + '123' ); // 123
console.log( + '123.45' ); // 123.45
console.log( + '0x20' ); // 32

非数 (NaN)

文字列が数値でない場合は NaN (非数 Not a Number)が返されます。

console.log( parseInt('ac',10) ); // NaN

文字列が NaN かを判定するには Number.isNaN() を利用します。

console.log( Number.isNaN(parseInt('123',10)) ?  'TRUE' : 'FALSE' ); // FALSE
console.log( Number.isNaN(parseInt('ac',10)) ?  'TRUE' : 'FALSE' ); // TRUE

perseInt / perseFloat と単項演算子の動作の違い。

文字列に数字以外が入っていた場合、perseInt / perseFloat は数字以外の文字が現れるまでの数字を返しますが、単項演算子は NaN を返します。

console.log( parseInt('123ac',10) ); // 123
console.log( + '123ac' ); // NaN
console.log( parseFloat('123.4ac') ); // 123.4
console.log( + '123.4ac' ); // NaN

BigInt

BigIntを使う場合は整数の後に n をつけます。

var val1 = 1n ;
console.log(val1,typeof(val1)); // 1n 'bigint'

Number 型と BigInt 型との間での演算はできません。

var val3 = 2n + 5; // Uncaught TypeError: Cannot mix BigInt and other types, use explicit conversions

参考リンク

MDN 開発者向けのウェブ技術 > Math
MDN 開発者向けのウェブ技術 > Number.isSafeInteger
MDN 開発者向けのウェブ技術 > parthInt
MDN 開発者向けのウェブ技術 > parthFloat
MDN 開発者向けのウェブ技術 > Number.isNaN
MDN 開発者向けのウェブ技術 > JavaScript のデータ型とデータ構造
MDN 開発者向けのウェブ技術 > JavaScript「再」入門