Effective Javascript 阅读笔记(1)-理解Javascript 的浮点数
2018-01-10 14:32
260 查看
对于数据类型,JavaScript 只有一种数据类型,无论是整数还是浮点,都会将它统一的处理为数字“number”类型。
typeof 17// "number "
typeof 95.2// "number "
typeof -17// "number "
JavaScript 中的所有数字都是双精度浮点数。(注:类型---double float数据类型,此数据类型与单精度数据类型(float)相似,但精确度比float高,编译
4000
时所占的内存空间依不同的编译器而有所不同,通常情况,单精度浮点数占4字节(32位)内存空间,其数值范围为3.4E-38~3.4E+38,;双精度型占8
个字节(64位)内存空间,其数值范围为1.7E-308~1.7E+308。)
一般情况下除了位运算符比较特殊,其他的算数运算基本上都可以使用两者的组合进行运算。但是JavaScript会进行额外的工作。因为数字是已浮点数进行存储的,所以必须先转化为整数,然后在转化会浮点数。
因此就会导致一些计算过程的不精确
例如上面的例子,计算中会产生不精确的计算
实际上对于0.1+0.2,JavaScript首先先把0.1与0.2转化成二进制
由于在js中浮点数只有53位的精度,导致后面的一些位数会被舍弃,所以计算完成之后再次转化为十进制的时候就会出现偏差。
所以,为了防止这种情况出现,在浮点型计算操作的时候,尽可能的采去整数值运算。
typeof 17// "number "
typeof 95.2// "number "
typeof -17// "number "
JavaScript 中的所有数字都是双精度浮点数。(注:类型---double float数据类型,此数据类型与单精度数据类型(float)相似,但精确度比float高,编译
4000
时所占的内存空间依不同的编译器而有所不同,通常情况,单精度浮点数占4字节(32位)内存空间,其数值范围为3.4E-38~3.4E+38,;双精度型占8
个字节(64位)内存空间,其数值范围为1.7E-308~1.7E+308。)
一般情况下除了位运算符比较特殊,其他的算数运算基本上都可以使用两者的组合进行运算。但是JavaScript会进行额外的工作。因为数字是已浮点数进行存储的,所以必须先转化为整数,然后在转化会浮点数。
因此就会导致一些计算过程的不精确
例如上面的例子,计算中会产生不精确的计算
实际上对于0.1+0.2,JavaScript首先先把0.1与0.2转化成二进制
由于在js中浮点数只有53位的精度,导致后面的一些位数会被舍弃,所以计算完成之后再次转化为十进制的时候就会出现偏差。
所以,为了防止这种情况出现,在浮点型计算操作的时候,尽可能的采去整数值运算。
相关文章推荐
- [Effective JavaScript 笔记] 第2条:理解JavaScript的浮点数
- Effective Javascript 阅读笔记(4)-JavaScript 三种不同的使用模式
- Effective Javascript 阅读笔记(5)-JavaScript 高阶函数
- [Effective JavaScript 笔记] 第12条:理解变量声明提升
- Effective Javascript 阅读笔记(2)-了解分号插入的局限
- Effective Javascript 阅读笔记(3)-闭包
- [Effective JavaScript 笔记]第30条:理解prototype、getPrototypeOf和__ptoto__之间的不同
- [Effective JavaScript 笔记]第18条:理解函数调用、方法调用及构造函数调用之间的不同
- [Effective JavaScript 笔记]第27条:使用闭包而不是字符串来封装代码
- [Effective JavaScript 笔记]第7章:并发--个人总结
- [Effective JavaScript 笔记]第44条:使用null原型以防止原型污染
- 深入理解计算机系统的阅读笔记
- 【阅读笔记】JavaScript 高级程序设计(二)
- 阅读理解笔记(包含新题型):总结
- [Effective JavaScript 笔记]第47条:绝不要在Object.prototype中增加可枚举的属性
- [阅读笔记]王坚:云计算和大数据你们都理解错了
- js学习笔记——理解javascript的对象与继承
- [Effective JavaScript 笔记]第31条:使用Object.getPrototypeOf函数而不要使用__proto__属性
- [Effective JavaScript 笔记]第33条:使构造函数与new操作符无关
- <深入理解JavaScript>学习笔记(3)_全面解析Module模式