ホームページ  >  記事  >  ウェブフロントエンド  >  javascript -数値型の値

javascript -数値型の値

高洛峰
高洛峰オリジナル
2017-02-25 16:16:351237ブラウズ

概要

JavaScript は内部的に数値を表すために IEEE754 形式を使用するため、整数と浮動小数点数を区別せず、64 ビット浮動小数点数の形式で格納されます。つまり、JavaScript の内部には小数点がまったくありません。ただし、一部の操作は整数で完了する必要があるため、JavaScript は操作を実行する前に 64 ビット浮動小数点数を 32 ビット整数に変換することがあります。

整数

JavaScript は、整数の 4 つの表現方法を提供します:

1。2 進数: 0 または 1 以外の数値が表示される場合、エラーが報告されます

2。 8 進数: 接頭辞 0o が付いている値、または 0 の後に数字 (0 ~ 7) が続きます。上記の数値範囲を超える場合、最初の桁の 0 は無視され、10 進数として扱われます

注: 8 進リテラルは厳密モードでは無効であり、このモードをサポートする JavaScript エンジンでエラーがスローされます

3。 16 進数: 接頭辞 0x の後に任意の 16 進数 (0 ~ 9 および A ~ F) が続きます。範囲を超える場合は、エラーが報告されます

4。


var num2 = 0b11;
 console.log(num2); //3
 var num2 = 0b12;
 console.log(num2); //报错
 var num8 = 0o76;
 console.log(num8); //02
 var num8 = 0o78;
 console.log(num8); //报错
 var num16 = 0x2a;
 console.log(num16); //42
 var num16 = 0x2h;
 console.log(num16) //报错


浮動小数点数

いわゆる浮動小数点数とは、値に小数点が含まれ、小数点の後に少なくとも 1 桁の数字が必要であることを意味します。整数とは異なり、浮動小数点数は 10 進数でしか表現できないため、浮動小数点数の演算を設計する場合は注意が必要です。たとえば、

 console.log(0.1 + 0.2 == 0.3); //false 0.30000000000000004
 console.log(0.6/0.2); //2.9999999999999996


科学的表記法


それらの非常に大きな値や小さな値は、e表記法(つまり科学的表記法)で表される浮動小数点値で表現できます。 e 表記で表される値は、e の前にある値に 10 の指数乗を乗算したものと等しくなります。次の 2 つの場合、JavaScript は値を自動的に科学表記に変換します。その他の場合は、リテラルで直接表現されます。形状。

1. 小数点の前の数字が 21 桁以上ある

2. 小数点以下の 0 が 5 桁以上ある


数値の範囲


メモリの関係で ECMAScript の制限 世界中のすべての値を保存できるわけではないため、最大値と最小値が存在します

最小値は Number.MIN_VALUE に格納され、この値は 5e-324 です

最大値は Number.MAX_VALUE に格納されます。この値は 1.7976931348623157e +308


 console.log(1234567890123456789012);// 1.2345678901234568e+21
 console.log(123456789012365648787); //123456789012365660000 

数値が最大値を超えると、JavaScript は Infinity を返します。これは、正のオーバーフロー (オーバーフロー) と呼ばれます。負の最小値 -1023 (つまり、0 に非常に近い) に等しいかそれを超える場合、JavaScript はこの数値を 0 に直接変換することを負のオーバーフロー (アンダーフロー) と呼びます。値が有限であるかどうかを判断したい場合は、isFinite を使用できます。 () 関数。この関数は、引数が最小値と最大値の間にある場合に true を返します

 console.log(0.0000006);//6e-7
 console.log(0.000006); //0.000006


特別な値


1、+0、-0

これらの 2 つの 0 は、ビッグペア 数値の点ではすべて同等です


 console.log(Number.MIN_VALUE) //5e-324
 console.log(Number.MAX_VALUE); //1.7976931348623157e+308

が、分母として使用すると異なります

1/-0 == 1/+0; //false 2. infinity

Infinityは「無限」を意味し、2つのシナリオを表すために使用されます。 1 つは、正の値が大きすぎるか、負の値が小さすぎて表現できないことです。もう 1 つは、0 以外の値を 0 で割って無限大を得るということです。 Infinity が参加する計算の結果は、それ自体、0、または NaN のみです。オペランドが数値を返さない場合

NaN は、それ自体を含むどの値とも等しくなく、NaN を含む演算はすべて NaN を返します


 var result = Number.MAX_VALUE + Number.MAX_VALUE;
 console.log(isFinite(result)); //false

1/-0 == 1/+0; //false

2、infinity

Infinity表示“无穷”,用来表示两种场景。一种是一个正的数值太大,或一个负的数值太小,无法表示;另一种是非0数值除以0,得到Infinity。


 -0 === +0; //true
 0 === -0; //true
 0 === +0; //true


Infinity参与的运算结果只能是其本身、0或NaN


 Math.pow(2,Math.pow(2,100));//Infinity
 1/0;//Infinity


3、NaN

这个数值表示一个本来要返回数值的操作数未返回数值的情况

NaN与任何值不相等,包括它本身,并且涉及NaN的任何操作都会返回NaN


* Infinity;//Infinity
- Infinity;//-Infinity
+ Infinity;//Infinity
/ Infinity;//0
 Infinity / 2;//Infinity
 Infinity * Infinity;//Infinity
 Infinity - Infinity;//NaN
 Infinity + Infinity;//Infinity
 Infinity / Infinity;//NaN


NaN不是一种独立的数据类型,而是一种特殊数值,它的数据类型依然属于Number

 typeof NaN; //number

NaN は独立したデータ型ではありませんが、特別な数値であり、そのデータ型は依然として Number

typeof NaN に属します。ただし、isNaN は数値に対してのみ有効です。他の値を入力した場合は、最初に数値に変換されます。たとえば、文字列が渡されると、その文字列は最初に NaN に変換されるため、最終的には true が返されます。これには特に注意が必要です。つまり、isNaN が true となる値は、NaN ではなく文字列である可能性があります。 <p class="jb51code"><br></p> <p><pre class="brush:js;"> 5 - &amp;#39;x&amp;#39;; //NaN Math.acos(2); //NaN 0 / 0; //NaN NaN == NaN;//false NaN == Infinity;//false</pre><br></p> <p></p> NaN を判断するより信頼性の高い方法は、NaN がそれ自体と等しくない唯一の JavaScript の値であるという機能を使用して判断することです <p class="jb51code"><br></p> <p><pre class="brush:js;"> isNaN(&amp;#39;Hello&amp;#39;) // true // 相当于 isNaN(Number(&amp;#39;Hello&amp;#39;)) // true</pre><br></p> <p><strong></strong>数体系変換</p> <p></p> 数値以外の値を数値に変換できる関数は、Number()、parseInt()、parseFloat() の 3 つです。このうち、Number() は任意の型の値を数値に変換できますが、parseInt() と parseFloat() は文字列を数値に変換するためにのみ使用されます<p><span style="color: #0000ff"><strong></strong>Number()</span></p> <p></p>変換ルール: <p></p>1 . ブール値の場合、true と false はそれぞれ 1 と 0 に変換されます<p></p>2。null 値の場合は 0🎜 が返されます。<p>3、如果是undefined,返回NaN</p> <p>4、如果是字符串,遵循以下规则:</p> <p>(1)若字符串只包含十进制或十六进制数字,则转成十进制的数字</p> <p>注意:Number()不识别八进制数字的字符串,会按照十进制数字处理</p> <p>字符串'1.2.'不会报错,但数字1.2.会报错</p> <p>(2)若字符串为空字符串或空格字符串,则转成0</p> <p>(3)其他情况的字符串,则转成NaN</p> <p class="jb51code"><br></p><pre class="brush:js;">Number(true) //1 Number(null) //0 Number(undefined) //NaN Number(&quot;0123&quot;) //123 Number(&quot;0x123&quot;) //291 Number(&quot;0.2&quot;) //0.2 Number(&quot;&quot;) //0 Number(&quot;asd&quot;) //NaN</pre><p><br></p> <p><span style="color: #0000ff"><strong>parseInt()</strong></span></p> <p>parseInt()专门用于把字符串转换成整数。在转换字符串时,会忽略字符串前面的空格,直到找到第一个非空格字符。如果第一个字符不是数字字符或者负号,parseInt()就会返回NaN。如果是,则继续解析,直到解析完成或者遇到非数字字符</p> <p class="jb51code"><br></p><pre class="brush:js;"> console.log(parseInt(&amp;#39; 123.8px&amp;#39;));//123 console.log(parseInt(&amp;#39; 123.8 &amp;#39;));//123 console.log(parseInt(&amp;#39; -123.8px&amp;#39;));//-123 console.log(parseInt(&amp;#39;a123.8px&amp;#39;));//NaN console.log(parseInt(&amp;#39;0 123.8px&amp;#39;));//0</pre><p><br></p> <p>注意:在ECMAScript5中,parseInt()已经不具备解析八进制的能力。例如八进制“070”,会忽略前面的“0”,得到十进制的70</p> <p>为了消除在使用parseInt()函数时可能导致的上述困惑,可以为这个函数提供第二个参数:转换时使用的基数(多少进制)</p> <p class="jb51code"><br></p><pre class="brush:js;"> parseInt(&quot;070&quot;) //70 parseInt(&quot;070&quot;,8) //56</pre><p><br></p> <p><span style="color: #0000ff"><strong>parseFloat()</strong></span></p> <p>parseFloat()专门用于字符串转换浮点数。同样地,解析时会忽略字符串前面的空格,直到找到第一个非空格字符,然后一直解析到字符串末尾或一个无效的浮点数字字符为止</p> <p class="jb51code"><br></p><pre class="brush:js;">console.log(parseFloat(&amp;#39; 0123.px&amp;#39;));//123 console.log(parseFloat(&amp;#39; 123.px&amp;#39;));//123 console.log(parseFloat(&amp;#39; 123.1px&amp;#39;));//123.1 console.log(parseFloat(&amp;#39; 123.1.2px &amp;#39;));//123.1 console.log(parseFloat(&amp;#39; -123.0px&amp;#39;));//-123 console.log(parseFloat(&amp;#39;.123.1px&amp;#39;));//0.123 console.log(parseFloat(&amp;#39;0 123px&amp;#39;));//0</pre><p><br></p> <p>注意:parseFloat()只解析十进制,所以十六进制的字符串始终会被转换成0。因此也没有第二个参数用来指定基数</p> <p><code> parseFloat("0xA") //0

注意:Number('')的结果是0,parseInt('')和parseFloat('')的结果是NaN

更多Number类型值相关文章请关注PHP中文网!

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。