数値 (Number)

表現可能な値

その大きさはIEEE754標準の64ビット浮動小数点数形式であり、表現可能な最大値は±1.7976931348623157×10³⁰⁸です。これはC言語やC++のdouble型に相当します。

これらの値は定数として定義されているので、それからも確認できます。

  定数 数値
表現可能な最大値 Number.MAX_VALUE ±1.7976931348623157×10³⁰⁸
(0に最も近い値で)
表現可能な最小値
Number.MIN_VALUE ±5×10⁻³²⁴

整数 (Integers)

JavaScriptでは整数と浮動小数点数は区別されず、すべての数値は浮動小数点数として扱われます。

整数リテラル (Integer literal)

先頭の文字によって異なる位取り記数法に解釈されます。

先頭の文字 位取り記数法
0b (0B) ※1 2進数
0または0o (0O) ※1 8進数
0でない 10進数
0x (0X) 16進数
Integers - Grammar and types - JavaScript | MDN

※1 2進と8進の0b (0B)、0o (0O) の表記は、Internet Explorerなど一部のブラウザではサポートされません。よって2進は他の位取り記数法で、8進は010のような0から始める形式で記述するようにします。Browser compatibility - Lexical grammar - JavaScript | MDN

(0b10).toString(10) // "2"
(0o10).toString(10) // "8"
(  10).toString(10) // "10"
(0x10).toString(10) // "16"

精度

整数として精度が保証されるのは、-2⁵³ (-9,007,199,254,740,992) ~2⁵³ (9,007,199,254,740,992) までです。その範囲外では演算結果に誤差が生じます。

計算誤差

精度が保証される範囲を外れた数値で演算を行った場合、演算結果に誤差が生じることがあります。

var a = 9007199254740992; // = 2^53

document.writeln( a - 1 ); // 9007199254740991
document.writeln( a + 0 ); // 9007199254740992
document.writeln( a + 1 ); // 9007199254740992 <- miss
document.writeln( a + 2 ); // 9007199254740994
document.writeln( a + 3 ); // 9007199254740996 <- miss

浮動小数点数 (Floating point)

浮動小数点数リテラル (Floating-point literal)

3.1415
-3.1E12
.1e12
2E-12

オブジェクト

Numberオブジェクト

new Number( value )
構文 - Number - JavaScript | MDN

n進数

Number.toString()メソッドで、n進数形式の文字列に変換できます。

number.toString( radix )
Number.prototype.toString() - JavaScript | MDN

10進数以外への変換はECMAScriptでは規定されていませんが、Internet Explorer、Chrome、Firefox、OperaそしてSafariで確認したところ、すべて同じ結果を得られました。

var a = 255;

document.writeln( a.toString( 2 ) );  // 2進数 (Binary) > 11111111
document.writeln( a.toString( 16 ) ); // 16進数 (Hexadecimal) > ff

結果は、その数値を表現するのに必要な桁数の文字列となります。

( 0 ).toString( 2 );  // "0"
( 2 ).toString( 2 );  // "10"
( 10 ).toString( 2 ); // "1010"

数が負数であった場合はその数の絶対値として変換され、先頭に「-」記号が付けられます。特に2進数では、2の補数 (two's complement) とならない点に注意が必要です。Description - Number.prototype.toString() - JavaScript | MDN

(  10 ).toString( 2 ); // "1010"
( -10 ).toString( 2 ); // "-1010"

(  10 ).toString( 16 ); // "a"
( -10 ).toString( 16 ); // "-a"
36進数

toString()は2~36進数まで対応しており、36進数では数値の10文字と英字の26文字の計36文字で表されます。

( 34 ).toString( 36 ); // "y"
( 35 ).toString( 36 ); // "z"
( 36 ).toString( 36 ); // "10"
( 37 ).toString( 36 ); // "11"

Mathオブジェクト

プロパティ

プロパティ 説明 お使いの環境での値
E ネイピア数 (オイラー数)
LN2 2の自然対数
LN10 10の自然対数
LOG2E 2を底としたEの対数
LOG10E 10を底としたEの対数
PI 円周率
SQRT1_2 1/2の平方根
SQRT2 2の平方根
Properties - Math - JavaScript | MDN

メソッド

三角関数 (trigonometric function)
メソッド 説明
sin 引数として与えた数の、サインを返す
cos 引数として与えた数の、コサインを返す
tan 引数として与えた数の、タンジェントを返す
asin 引数として与えた数の、アークサインをラジアン単位で返す
acos 引数として与えた数の、アークコサインをラジアン単位で返す
atan 引数として与えた数の、アークタンジェントをラジアン単位で返す
atan2 引数の比率でのアークタンジェントを返す
Methods - Math - JavaScript | MDN
メソッド 説明
abs 引数として与えた数の、絶対値を返す
sqrt 引数として与えた数の、平方根を返す
log 引数として与えた数の、自然対数 (底はE) を返す
logxyは、Math.log(y) / Math.log(x)で求まる。
exp Enumberを返す。ここでのnumberは引数で、Eは自然対数の底であるネイピア数 (オイラー数) となる。
pow 第一引数の値を第二引数の値で累乗した値を返す
imul 2つの引数をとり、C言語の様な32ビット乗算の結果を返す ※ 非標準
メソッド 説明
max 引数として与えた複数の数の中で、最大の数を返す
min 引数として与えた複数の数の中で、最小の数を返す
random 0以上1未満の、疑似乱数を返す
random()
randomNumber = Math.random()
Math.random() - JavaScript | MDN
Math.random() // 0.2806025304334251
Math.random() // 0.7712310744633147
Math.random() // 0.3706147041295986
Math.random() // 0.6977370181596007

整数を得るには次のようにします。

Math.floor( Math.random() * 5 ) // 1
Math.floor( Math.random() * 5 ) // 0
Math.floor( Math.random() * 5 ) // 2
Math.floor( Math.random() * 5 ) // 4

数値の丸め

メソッド 説明
ceil 引数として与えた数以上の、最小の整数を返す
floor 引数として与えた数以下の、最大の整数を返す
round 引数として与えた数を四捨五入して、最も近似の整数を返す
ceil、floor、round 引数とその戻り値
  -1.51 -1.50 -1.49 1.49 1.50 1.51
ceil -1 2
floor -2 1
round -2 -1 1 2

特殊な定数

定数 意味
Infinity プラスの無限大値
NaN 数値以外の特殊な値
Number.NaN
Number.MAX_VALUE 表現可能な最大値
Number.MIN_VALUE 表現可能な最小値 (0に最も近い値で)
Number.POSITIVE_INFITINY プラスの無限大値
Number.NEGATIVE_INFINITY マイナスの無限大値

たとえば、

var a = 1 / 0;

のようにゼロ除算すると、aはInfinityとなります。一方で、

var a = 1 * 'foo';

のように文字列で乗算すると、NaNとなります。

結果
1/0 Infinity
0/1 0
0/0 NaN
結果   結果
NaN > 0 false   Infinity > 0 true
NaN < 0 false   Infinity < 0 false
NaN == 0 false   Infinity == 0 false
NaN == NaN false   Infinity == Infinity true

NaN

あるオブジェクトがNaNであるかどうかは、isNaN()もしくは自身と比較することで判別できます。

var a = Number( 'A' );
if( isNaN( a ) )
{
    // NaNである
}

if( a != a )
{
    // NaNである
}
NaN - JavaScript | MDN

文字列への変換

数値から文字列への変換で解説しています。