その大きさはIEEE754標準の64ビット浮動小数点数形式であり、表現可能な最大値は±1.7976931348623157×10³⁰⁸です。これはC言語やC++のdouble型に相当します。
これらの値は定数として定義されているので、それからも確認できます。
定数 | 数値 | |
---|---|---|
表現可能な最大値 | Number.MAX_VALUE | ±1.7976931348623157×10³⁰⁸ |
(0に最も近い値で) 表現可能な最小値 |
Number.MIN_VALUE | ±5×10⁻³²⁴ |
JavaScriptでは整数と浮動小数点数は区別されず、すべての数値は浮動小数点数として扱われます。
先頭の文字によって異なる位取り記数法に解釈されます。
先頭の文字 | 位取り記数法 |
---|---|
0b (0B) ※1 | 2進数 |
0または0o (0O) ※1 | 8進数 |
0ではない | 10進数 |
0x (0X) | 16進数 |
※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
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"
お使いの環境での精度
new Number( value )構文 - Number - JavaScript | MDN
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"
toString()は2~36進数まで対応しており、36進数では数値の10文字と英字の26文字の計36文字で表されます。
( 34 ).toString( 36 ); // "y" ( 35 ).toString( 36 ); // "z" ( 36 ).toString( 36 ); // "10" ( 37 ).toString( 36 ); // "11"
プロパティ | 内容 | お使いの環境での値 |
---|---|---|
E | ネイピア数 (オイラー数) | |
LN2 | 2の自然対数 | |
LN10 | 10の自然対数 | |
LOG2E | 2を底としたEの対数 | |
LOG10E | 10を底としたEの対数 | |
PI | 円周率 | |
SQRT1_2 | 1/2の平方根 | |
SQRT2 | 2の平方根 |
メソッド | 説明 |
---|---|
sin | 引数として与えた数の、サインを返す |
cos | 引数として与えた数の、コサインを返す |
tan | 引数として与えた数の、タンジェントを返す |
asin | 引数として与えた数の、アークサインをラジアン単位で返す |
acos | 引数として与えた数の、アークコサインをラジアン単位で返す |
atan | 引数として与えた数の、アークタンジェントをラジアン単位で返す |
atan2 | 引数の比率でのアークタンジェントを返す |
メソッド | 説明 |
---|---|
abs | 引数として与えた数の、絶対値を返す |
sqrt | 引数として与えた数の、平方根を返す |
log | 引数として与えた数の、自然対数 (底はE) を返す
logaxは、 |
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未満の、疑似乱数を返す |
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 | 引数として与えた数を四捨五入して、最も近似の整数を返す |
-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であるかどうかは、isNaN()もしくは自身と比較することで判別できます。
var a = Number( 'A' ); if( isNaN( a ) ) { // NaNである } if( a != a ) { // NaNである }NaN - JavaScript | MDN
数値から文字列への変換で解説しています。