数値 (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) までです。その範囲外では演算結果に誤差が生じます。Number.isSafeInteger() - JavaScript | MDN

計算誤差

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

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

精度

JavaScriptではIEEE 754の倍精度 (Double precision) を保証するとしているため、10進での有効桁数は15.95です。Number.isSafeInteger() - JavaScript | MDN Basic and interchange formats - IEEE floating point - Wikipedia

( 1/3 ).toFixed( 15 ); // "0.333333333333333"
( 1/3 ).toFixed( 16 ); // "0.3333333333333333"
( 1/3 ).toFixed( 17 ); // "0.33333333333333331"
( 1/3 ).toFixed( 18 ); // "0.333333333333333315"

お使いの環境での精度

オブジェクト

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 引数の比率でのアークタンジェントを返す
メソッド 説明
abs 引数として与えた数の、絶対値を返す
sqrt 引数として与えた数の、平方根を返す
log 引数として与えた数の、自然対数 (底はE) を返す

logaxは、Math.log(x) / Math.log(a)で求まる。

log2 Math.log(x) / Math.log(2)に等しい
log10 Math.log(x) / Math.log(10)に等しい
exp Enumberを返す。ここでのnumberは引数で、Eは自然対数の底であるネイピア数 (オイラー数) となる。
pow 第一引数の値を第二引数の値で累乗した値を返す
imul 2つの引数をとり、C言語の様な32ビット乗算の結果を返す ※非標準
Math.abs(-2); // 2
Math.sqrt(9); // 3

Math.log(Math.E*Math.E*Math.E); // 3
Math.log2(8); // 3
Math.log10(1000); // 3

Math.exp(Math.log(4)); // 4
Math.pow(2,4); // 16
メソッド 説明
max 引数として与えた複数の数の中で、最大の数を返す
min 引数として与えた複数の数の中で、最小の数を返す
random 0以上1未満の、疑似乱数を返す
Methods - Math - JavaScript | MDN
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

このときfloor()ではなくround()とすると、一様分布 (uniform distribution) となりません。

数値の丸め

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

文字列への変換

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

JavaScriptのドキュメントから検索