深入JavaScript中的Number类型

本文探讨了JavaScript中Number类型的细节,包括浮点型数值的保存方式,数值范围,精度丢失的原因,以及最大安全整数的概念。JavaScript使用双精度浮点型存储数值,遵循IEEE 754标准。精度丢失源于小数转换为二进制后的四舍五入。最大安全整数为2的53次方,超出此范围的整数计算可能不准确。
摘要由CSDN通过智能技术生成

在学习《JavaScript高级程序设计》的时候我们都会注意到书中特意强调的在JavaScript中0.1+0.2并不等于0.3这样一个浮点数计算错误的问题,以及大家都知道的JavaScript中最大整数范围到底是怎么产生的?因此查询了一些资料,对于JavaScript中的Number类型进行一个更为深入的了解,现整理如下:

简介

在JavaScript中数值只有一种,即Number类型,内部表示为双精度浮点型,即其他语言中的double类型,所以在JavaScript中实际上是没有整数类型的,数值都是按浮点数来处理的,存储方法相同,遵循IEEE 754国际标准,因此在JavaScript中3和3.0被视为同一个值,示例:

3.0 === 3 // true

对于整数情况,能够准确计算的整数范围为在-253~253之间,不包含两个端点,因此只要在这个范围内整数可以放心使用。除了十进制以外整数还可以通过八进制或十六进制的字面值来表示,其中八进制字面值的第一位必须是零,然后是八进制数字序列(0 ~ 7),如果字面值中的数值超出范围,那么前导零将被忽略,后面的数值被当作十进制解析,这儿需要注意在严格模式中八进制的这种表示会报错,ES6中进一步明确,八进制的表示要使用前缀0o,示例:

// 非严格模式
(function(){
	console.log(0o11 === 011)
}) ()// true

// 严格模式
(function(){
	'use strict';
	console.log(0o11 === 011)
})()
// Uncaught GyntaxError

十六进制字面值前两位必须是0x,后跟任何十六进制数字(0 ~ 9以及A ~ F),其中A ~ F可以大写,也可以小写。ES6中又扩展了二进制的写法,使用前缀0b(或0B)。
虽然在JavaScript中无论是小数还是整数都是按照64位的浮点数形式存储,但是进行整数运算会自动转换为32位的有符号整数,例如位运算,有符号整数使用31位表示整数的数值,用第32位表示整数的符号,数值范围是-231 ~ 231

一、浮点型数值的保存

JavaScript中的Number类型使用的是双精度浮点型,即其他语言中的double类型,双精度浮点数使用8个字节即64bit来进行存储,现代计算机中浮点数大多是以国际标准IEEE 754来存储,存储过程分两步,
1、把浮点数转换为对应的二进制数,并用科学计数法表示
2、将转换之后的数通过IEEE 754标准表示成真正会在计算机存储的值。
根据IEEE 754标准任何一个二进制浮点数V都可以表示成:
V = ( − 1 ) S ⋅ M ⋅ ( 2 ) E {V }= (-1)^{S}\cdot{M}\cdot(2)^{E}\\ V=

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值