深入理解JavaScript中的浮点数
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了深入理解JavaScript中的浮点数,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含2573字,纯文字阅读大概需要4分钟。
内容图文
![深入理解JavaScript中的浮点数](/upload/InfoBanner/zyjiaocheng/353/a4a7161abca44b19a65f9ff0784812f8.jpg)
js只有一种数值型数据类型,不管是整数还是浮点数,js都把归为数字。
typeof 17; // “number”
typeof 98.6; // “number”
typeof –2.1; // “number”
js中的所有数字都是双精度浮点数。是由IEEE754标准制定的64位编码数字(这个是什么东东,不知道,回头查一下吧)
那么js是如何表达整数的,双精度浮点数可以完美地表示高达53位精度的整数(没有什么概念,没处理过多大的数据,没用完过!),从-9007199254740992(-253)到9007199254740992(253)的所有整数都是有效的双精度浮点数。
大多数算术运算符都可以使用整数、实数或两者的组合进行计算。
0.1*1.9 //0.19
-99+100 //1
21-12.3 //8.7
2.5/5 //0.5
21%8 //5
算术运算符比较特殊,js不会直接将操作数作为浮点数进行计算,而是将其隐式转换为32位整数后进行运算。(确切的说,会被转换为32位大端(big-endian)的2的补码表示的整数(实话说这里真的不知道是什么意思,求科普))以按位或运算表达式为
例:
8|1; //9
运算过程
首先8和1是双精度的浮点数。但也可以表示为32位整数,即32位的二进制表示。
整数8表示为32位二进制为:
0000 0000 0000 0000 0000 0000 0000 1000
也可能过
(8).toString(2); //”1000”
toString的参数是转换基数
(下面是我试的以其它基数转换的,和本文无关)
(8).toString(8); //”10”
(8).toString(16); //”8”
整数1表示为32位二进制为:
0000 0000 0000 0000 0000 0000 0000 0001
运行按位或
0000 0000 0000 0000 0000 0000 0000 1000
0000 0000 0000 0000 0000 0000 0000 0001
--------------------------------------------
0000 0000 0000 0000 0000 0000 0000 1001
同样的使用标准库函数parseInt验证,同样以2作为基数,前导0不影响运算结果,不必要。
parseInt('1001',2) //9
(下面是我试的以其它基数转换的,和本文无关)
parseInt('1001',8) //513
parseInt('1001',16) //4097
总结算术运算的过程就是,将操作数转换为整数,然后使用整数位模式进行运算,最后将结果转换为标准的js浮点数。
浮点数的警示:出了名的不精确。比如
0.1+0.2; //0.30000000000000004
原因:尽管64位浮点数精度已经很高,但双精度浮点数也只能表示一组有限的数字,而不能表示所有的实数集。浮点运算只能产生近似的结果,四舍五入到最接近的可表示的实数。当你执行一系列的运算,随着舍入误差的积累,运算结果会越来越不精确。舍入也使算术运算定律产生一些偏差。例如结合律。对于任意实数
x,y,z总满足(x+y)+z=x+(y+z)
浮点数就不一定:
(0.1+0.2)+0.3; //0.6000000000000001
0.1+(0.2+0.3); //0.6
浮点数权衡了精度和性能,关心精度时,要小心浮点数的局限性。
解决办法就是把浮点运算转化为整数运算。
(10+20)+30; //60
10+(20+30); //60
然后再除少放大倍数。要注意整数范围要在-253~253内。
总结
1、js的数字都是双精度的浮点数
2、js的整数仅仅是双精度浮点数的一个子集,不是单独的一个类型
3、位运算将数字视为32位的有符号整数
4、当心浮点运算的精度问题
以上这篇深入理解JavaScript中的浮点数就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持脚本之家。
内容总结
以上是互联网集市为您收集整理的深入理解JavaScript中的浮点数全部内容,希望文章能够帮你解决深入理解JavaScript中的浮点数所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。