JavaScript には浮動小数点型という数値型が 1 つだけあります。 JavaScript は内部的に数値を 64 ビット浮動小数点型として格納するため、実際には JavaScript には整数型は存在しません。 JavaScriptの数値形式では、表現できる整数の範囲は境界値も含めて「[-2^53~2^53]」ですが、配列のインデックスやビット演算子などは32を使用するので注意が必要です。 -ビット整数。
このチュートリアルの動作環境: Windows7 システム、JavaScript バージョン 1.8.5、Dell G3 コンピューター。
JavaScript には数値型が 1 つだけあり、内部的には 64 ビット浮動小数点数として表されます。したがって、実際には JavaScript には整数型は存在しません。
print(3/2); // 1.5
値が浮動小数点数として処理されていることがわかります。
JavaScript は、整数や小数に関係なく、内部的に数値を 64 ビット浮動小数点型で格納するためです。混乱を招くのは、一部のビット演算の実行には整数が必要なため、64 ビット浮動小数点数が自動的に 32 ビット整数に変換されることです。次にビット演算を実行します。 JavaScript では、1 と 1.0 は同じです
1 == 1.0 true 0.1+0.2 == 0.3 false 0.3/0.1 = 2.99999999996 (0.3-0.2) === (0.2-0.1) false
つまり、小数を含む演算を実行する場合は注意してください
JavaScript の数値形式 (IEEE で定義されている 64 ビット浮動小数点形式) に従ってください。 754)、表現できる整数の範囲は境界値を含めて[-2^53~2^53]です。ただし、配列のインデックス付け、ビットごとの演算子などでは 32 ビット整数が使用されることに注意してください。
浮動小数点値の最高精度は小数点以下 17 桁ですが、算術計算を実行する場合、その精度は整数の精度よりもはるかに低くなります。たとえば、0.1 を 0.2 に加算した結果は、0.3 ではなく、0.30000000000000004 になります。この小さな丸め誤差により、特定の浮動小数点値をテストすることができなくなります。
2 進浮動小数点数は 1/2、1/8 などを正確に表現できますが、1/10、1/100 などを正確に表現できないためです。したがって、0.1 のような単純な数値は正確に表現できません。
浮動小数点数の精度の問題により、比較中に予期しない結果が得られる場合があります:
print((0.1+0.2) == 0.3); // false print(0.1+0.2); // 0.30000000000000004 print(0.3); // 0.3 print((10/3-3) == (1/3));// false print(10/3-3); // 0.3333333333333335 print(1/3); // 0.3333333333333333
整数の場合、53 ビット以内の整数が使用されている限り、この問題は発生しません。 、安心してご利用いただけます。
整数は、10 進数で表現されるほかに、8 進数 (基数 8) または 16 進数 (基数 16) のリテラルで表現することもできます。このうち、8 進数リテラルの最初の桁はゼロ (0) であり、その後に一連の 8 進数 (0 ~ 7) が続く必要があります。リテラルの値が範囲を超える場合、先頭のゼロは無視され、後続の値は 10 進数値として解釈されます。
8 進リテラルは厳密モードでは無効であり、このモードをサポートする JavaScript エンジンでエラーがスローされます。
16 進リテラル値の最初の 2 桁は 0x であり、その後に任意の 16 進数字 (0 ~ 9 および A ~ F) が続く必要があります。このうち、A ~ F は大文字でも小文字でも構いません。
浮動小数点値の保存には整数値の保存の 2 倍のメモリ領域が必要なため、ECMAScript は浮動小数点値を整数値に変換するのに時間を費やしません。明らかに、小数点の後に数字が続かない場合は、値を整数値として保存できます。同様に、浮動小数点値自体が整数 (1.0 など) を表す場合、その値も整数に変換されます。
#数値オブジェクト
print((6).toString()); // 6
var a = Number('x'); print(typeof a, a); // number NaN var b = new Number('x'); print(typeof b, b); // object [Number: NaN]
print(Number.MAX_VALUE); // 1.7976931348623157e+308 print(Number.MIN_VALUE); // 5e-324 print(Number.NaN); // NaN print(Number.NEGATIVE_INFINITY); // -Infinity print(Number.POSITIVE_INFINITY); // Infinity
#Infinity#数値演算結果が JavaScript が表現できる数値の上限を超える場合、結果は特殊な無限値 (Infinity) になります。負の値は JavaScript が表現できる負の数値の範囲を超えています。結果は -Infinity になります。
演算結果が限りなくゼロに近く、JavaScript が表現できる最小値より小さい場合 (アンダーフロー)、結果は 0 になります。負の数がアンダーフローの場合、結果は -0 になり、正の数になります。アンダーフロー、オーバーフローの場合、結果は 0 になります。 JavaScript では、グローバル変数 Infinity と NaN が事前定義されており、どちらも読み取り専用変数です。由于内存的限制,ECMAScript并不能保存世界上所有的数值。ECMAScript能够表示的最小数值保存在Number.MIN_VALUE中——在大多数浏览器中,这个值是5e-324;能够表示的最大数值保存在Number.MAX_VALUE中——在大多数浏览器中,这个值是1.7976931348623157e+308。如果某次计算的结果得到了一个超出JavaScript数值范围的值,那么这个数值将被自动转换成特殊的Infinity值。具体来说,如果这个数值是负数,则会被转换成-Infinity(负无穷),如果这个数值是正数,则会被转换成Infinity(正无穷)。
如果某次计算返回了正或负的Infinity值,那么该值将无法继续参与下一次的计算,因为Infinity不是能够参与计算的数值。要想确定一个数值是不是有穷的(换句话说,是不是位于最小和最大的数值之间),可以使用isFinite()函数。
NaN
NaN是一个特殊的数值,这个数值用于表示一个本来要返回数值的操作数未返回数值的情况(这样就不会抛出错误了)。
对于NaN,要记住的一点是,只要运算中出现NaN,结果就一定是NaN,就算是"NaN*0"这样的运算,也一样是NaN。只要对NaN运行比较运行,结果就一定是false,就算"NaN==NaN"/"NaN!=NaN"等,都是false。
要判断一个值是否为NaN,可以使用isNaN()函数:
print(isNaN(NaN)); // true print(isNaN(0/0)); // true
在基于对象调用isNaN()函数时,会首先调用对象的valueOf()方法,然后确定该方法返回的值是否可以转换为数值。如果不能,则基于这个返回值再调用toString()方法,再测试返回值。
也可以使用x!==x来判断x是否为NaN,只有在x为NaN的时候,这个表达式的值才为true。
inFinite()
isFinite函数用于判断一个数是否为“正常”的数值:
print(isFinite(Number.NaN)); // false print(isFinite(Number.NEGATIVE_INFINITY)); // false print(isFinite(Number.POSITIVE_INFINITY)); // false
除了以上3个特殊值外,其他值的结果都为true
假如x是一个普通数值,则有:
x/0 = Infinity x%0 = NaN x/Infinity = 0 x%Infinity = x 0/0 = NaN 0%0 = NaN Infinity/x = Infinity Infinity%x = NaN Infinity/Infinity = NaN Infinity%Infinity = NaN
完整输出如下:
print(0 / 0); // NaN print(3 / 0); // Infinity print(Infinity / 0); // Infinity print(0 % 0); // NaN print(3 % 0); // NaN print(Infinity % 0); // NaN ---------- print(0 / 4); // 0 print(3 / 4); // 0.75 print(Infinity / 4); // Infinity print(0 % 4); // 0 print(3 % 4); // 3 print(Infinity % 4); // NaN ---------- print(0 / Infinity); // 0 print(3 / Infinity); // 0 print(Infinity / Infinity); // NaN print(0 % Infinity); // 0 print(3 % Infinity); // 3 print(Infinity % Infinity); // NaN
负零与正零
负零与正零的值相等,不过毕竟带有符号,在一些运算中会有符号方面的差别,比如:
var zero = 0; var negz = -0;
此时,zero 等于 negz , 但1/zero 却不等于 1/negz。
【相关推荐:javascript视频教程、编程基础视频】
以上がJavaScriptの数値型は何種類ありますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。