022_JavaScript数字

1. JavaScript只有一种数值类型Number。(没有其它语言的short、int、long、float、double)

2. 书写数值时带不带小数点均可。

3. JavaScript数值始终是64位的浮点数

3.1. JavaScript数值始终以双精度浮点数来存储, 根据国际IEEE 754标准。

3.2. 此格式用64位存储数值, 其中0到51存储数字(片段), 52到62存储指数, 63位存储符号:

3.3. 整数类型的范围: 5e-324 ~ 1.7976931348623157e+308。

3.4. 值得注意的是, 对于整数的位运算(比如位移等操作), JavaScript仅支持32位整型数, 也即从-2147483648到+2147483647之间的整数。

4. 精度

4.1. 整数会被精确到15位:

var a = 999999999999999;   // a是15位整数最大值, 能保证精度, 是999999999999999
var b = 9999999999999997;  // b是16位整数, 不保证精度
var c = 9999999999999999; // c是16位整数, 不保证精度
// 15位的整数进行数学运行能够保证精准
var d = (((999999999999999 - 100000 - 1) / 2 - 9999) / 4 * 8 + 111999 + 8000) / 9 / 3 + 960900000000000;

4.2. 小数在进行数学运算的时候最大数是17位, 但是浮点的算数并不总是100%精准:

var e = 0.2 + 0.1; // 小数在进行数学运算的时候最大数是17位
var f = 0.3 - 0.2111; // 小数在进行数学运算的时候最大数是17位
var g = 0.001 + 1.1; // 并不总是17位小数
// 我们在对小说进行算数运算的时候, 通常对小说进行扩大10的几次方, 计算完成后, 再除以这个10的几次方
var h = (0.3 * 10000 - 0.2111 * 10000) / 10000; 

5. 科学计数法

5.1. 超大或超小的数可通过科学计数法来写。

5.2. 大于等于le+21的数字会自动使用科学计数法输出。

5.3. 小于le+21的数字纵然我们用科学计数法表示, 但输出时也会是完整数字。

5.4. 默认把具有6个或6个以上前导0的浮点数转换成科学计数法。

var i = 9.99999999999999930000e20; // 小于le+21的数字纵然我们用科学计数法表示, 但输出时也会是完整数字。
var j = 9.99999999999999940000e20; // 发生了舍入, 大于le+21, 使用科学计数法输出
var k = 1e21; // 科学计数法
var l = 0.0000001; // 默认把具有6个或6个以上前导0的浮点数转换成科学计数法。

6. 数字字符串

6.1. JavaScript字符串可以拥有数字内容。

6.2. 在所有数字运算中, JavaScript会尝试将字符串转换为数字。

6.3. 实例

var m = '100' / '10'; // 结果是10
var n = '100' * '10'; // 结果是1000
var o = '100' - '10'; // 结果是90

7. NaN-非数值

7.1. NaN 属于 JavaScript 保留词,指示某个数不是合法数。

7.2. 尝试将一个字符串完整的转换成数字时, 如果转换失败, 就会得到NaN(Not a Number)。

7.3. isNaN()函数

7.3.1. 您可使用全局JavaScript函数isNaN()来确定某个值是否是非数字值。

7.3.2. 语法

isNaN(x)

7.3.3. 参数

7.3.4. 如果x是特殊的非数字值NaN(或者是被转换为这样的值), 返回的值就是true。如果x是其他值, 则返回false。

7.3.5. 如果把NaN与任何值(包括其自身)相比得到的结果均是false, 所以要判断某个值是否是NaN, 不能使用==或===运算符。正因为如此, isNaN()函数是必需的。

7.4. NaN是数值类型: typeOf NaN返回number。

7.5. 实例

var u = isNaN("111"); // 返回false
var v = isNaN("111a"); // 返回true
var w = isNaN(NaN); // 返回true, 因为NaN不是数
var x = typeof(NaN); // 返回number

8. 无穷数

8.1. Infinity(或-Infinity)是JavaScript在计算数时超出最大可能数范围时返回的值。

8.2. Infinity是数值类型: typeOf Infinity返回number。

8.3. isFinite()函数

8.3.1. 您可使用全局JavaScript函数isFinite()检查某个值是否为有穷大的数。

8.3.2. 语法

isFinite(number)

8.3.3. 参数

8.3.4. 如果number是有限数字或可转换为有限数字, 那么返回true。否则, 如果number是NaN(非数字)或者是正、负无穷大的数, 则返回false。

var y = isFinite(111); // 返回true
var z = isFinite("111"); // 返回true
var A = isFinite("111a"); // 返回false
var B = isFinite(Infinity); // 返回false, 因为Infinity是正无穷大
var C = isFinite(-Infinity); // 返回false, 因为-Infinity是负无穷大
var D = isFinite(NaN); // 返回false, 因为NaN非数字
var E = typeof(Infinity); // 返回number
var F = typeof(-Infinity); // 返回number
var G = isNaN(Infinity); // 返回false, 因为Infinity是正无穷数
var H = isNaN(-Infinity); // 返回false, 因为-Infinity是负无穷数

9. 数字和字符串相加

9.1. JavaScript的加法和级联(concatenation)都使用+运算符。数字用加法, 字符串用级联。

9.2. 如果对两个字符串相加,结果将是一个字符串的级联:

var x = "10";
var y = "20";
var z = x + y;           // z 将是 1020(字符串)

9.3. 如果您对一个数和一个字符串相加, 结果也是字符串级联:

var x = 10;
var y = "20";
var z = x + y;           // z 将是 1020(一个字符串)

9.4. 两个或多个数字算数运算, 并且在语句最左侧(JavaScript从左向右进行编译), 之后又和字符串级联, 这种情况会先进行算数运算再和字符串级联。

var x = 10;
var y = 20;
var z = "30";
var result = x + y + z; // 因为x和y都是数, 10+20将被相加。因为z是字符串, 30+"30"被级联。

10. 进制

10.1. 计算机中常见的进制是: 二进制、八进制、十进制和十六进制。

10.2. 八进制字面量的首数字必须是0, 其后的数字可以是任何八进制数字(0-7)。

var x = 011;             // x将是9

10.3. 十六进制字面量以0x或0X前缀开头, 然后是任意的十六进制数字(0到9和A到F)。

var x = 0xFF;             // x将是255

10.4. 默认地, Javascript把数显示为十进制数。

10.5. 尽管所有整数都可以表示为八进制或十六进制, 但所有数学运算返回的都是十进制结果。

11. 例子

11.1. 代码

<!DOCTYPE html>
<html>
	<head>
		<meta charset="utf-8" />
		<title>JavaScript数字</title>
	</head>
	<body>
		<script type="text/javascript">
			var a = 999999999999999;   // a是15位整数最大值, 能保证精度, 是999999999999999
			var b = 9999999999999997;  // b是16位整数, 不保证精度
			var c = 9999999999999999; // c是16位整数, 不保证精度
			// 15位的整数进行数学运行能够保证精准
			var d = (((999999999999999 - 100000 - 1) / 2 - 9999) / 4 * 8 + 111999 + 8000) / 9 / 3 + 960900000000000;
			var e = 0.2 + 0.1; // 小数在进行数学运算的时候最大数是17位
			var f = 0.3 - 0.2111; // 小数在进行数学运算的时候最大数是17位
			var g = 0.001 + 1.1; // 并不总是17位小数
			// 我们在对小说进行算数运算的时候, 通常对小说进行扩大10的几次方, 计算完成后, 再除以这个10的几次方
			var h = (0.3 * 10000 - 0.2111 * 10000) / 10000; 
			var i = 9.99999999999999930000e20; // 小于le+21的数字纵然我们用科学计数法表示, 但输出时也会是完整数字。
			var j = 9.99999999999999940000e20; // 发生了舍入, 大于le+21, 使用科学计数法输出
			var k = 1e21; // 科学计数法
			var l = 0.0000001; // 默认把具有6个或6个以上前导0的浮点数转换成科学计数法。
			// 在所有数字运算中, JavaScript会尝试将字符串转换为数字。
			var m = "100" / "10"; // 结果是10
			var n = "100" * "10"; // 结果是1000
			var o = "100" - "10"; // 结果是90
			var p = "10" + "20";  // 结果是1020
			var q = 10 + "20"; // 结果是1020
			var r = "10" + 20; // 结果是1020
			var s = 10 + 20 + "30"; // 结果是3030
			var t = 10 + "20" + 30; // 结果是102030
			var u = isNaN("111"); // 返回false
			var v = isNaN("111a"); // 返回true
			var w = isNaN(NaN); // 返回true, 因为NaN不是数
			var x = typeof(NaN); // 返回number
			var y = isFinite(111); // 返回true
			var z = isFinite("111"); // 返回true
			var A = isFinite("111a"); // 返回false
			var B = isFinite(Infinity); // 返回false, 因为Infinity是正无穷大
			var C = isFinite(-Infinity); // 返回false, 因为-Infinity是负无穷大
			var D = isFinite(NaN); // 返回false, 因为NaN非数字
			var E = typeof(Infinity); // 返回number
			var F = typeof(-Infinity); // 返回number
			var G = isNaN(Infinity); // 返回false, 因为Infinity是正无穷数
			var H = isNaN(-Infinity); // 返回false, 因为-Infinity是负无穷数
			var I = 011; // 八进制数, E将是9
			var J = 0xFF; // 十六进制数, F将是255
			
			document.write('a = ' + a + '<br />');
			document.write('b = ' + b + '<br />');
			document.write('c = ' + c + '<br />');
			document.write('d = ' + d + '<br />');
			document.write('e = ' + e + '<br />');
			document.write('f = ' + f + '<br />');
			document.write('g = ' + g + '<br />');
			document.write('h = ' + h + '<br />');
			document.write('i = ' + i + '<br />');
			document.write('j = ' + j + '<br />');
			document.write('k = ' + k + '<br />');
			document.write('l = ' + l + '<br />');
			document.write('"100" / "10" = ' + m + '<br />');
			document.write('"100" * "10" = ' + n + '<br />');
			document.write('"100" - "10" = ' + o + '<br />');
			document.write('"10" + "20" = ' + p + '<br />');
			document.write('10 + "20" = ' + q + '<br />');
			document.write('"10" + 20 = ' + r + '<br />');
			document.write('10 + 20 + "30" = ' + s + '<br />');
			document.write('10 + "20" + 30 = ' + t + '<br />');
			document.write('isNaN("111") = ' + u + '<br />');
			document.write('isNaN("111a") = ' + v + '<br />');
			document.write('isNaN(NaN) = ' + w + '<br />');
			document.write('typeof(NaN) = ' + x + '<br />');
			document.write('isFinite(111) = ' + y + '<br />');
			document.write('isFinite("111") = ' + z + '<br />');
			document.write('isFinite("111a") = ' + A + '<br />');
			document.write('isFinite(Infinity) = ' + B + '<br />');
			document.write('isFinite(-Infinity) = ' + C + '<br />');
			document.write('isFinite(NaN) = ' + D + '<br />');
			document.write('typeof(Infinity) = ' + E + '<br />');
			document.write('typeof(-Infinity) = ' + F + '<br />');
			document.write('isNaN(Infinity) = ' + G + '<br />');
			document.write('isNaN(-Infinity) = ' + H + '<br />');
			document.write('I = ' + I + '<br />');
			document.write('J = ' + J + '<br />');
		</script>
	</body>
</html>

11.2. 效果图

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值