企业面试题: 关于JS在使用过程中 0.1+0.2!=0.3 的问题
考核内容: JavaScript中的二进制的浮点数的应用
题发散度: ★★★
试题难度: ★★★
【友情提示:舒克老湿意在为各位准备从事前端工程师岗位的小伙伴提供思路,所有代码仅供参考,切勿背题!!理解问题以及提高自己解决问题的能力最为重要!如果你有更好的解决思路,或者有什么问题,欢迎给舒克老湿留言,大家一同进步。】
解题思路:
在JavaScript中的二进制的浮点数0.1和0.2并不是十分精确,在他们相加的结果并非正好等于0.3,而是一个比较接近的数字 0.30000000000000004;
在IE8下是得到正常的,在chrom 和Firefox下是一个带到浮点的约数;
其实这是js作浮点运算的一个bug,在JavsScript中,变量在存储时并不区分number和float类型,而是统一按float存储。
而javascript使用IEEE 754-2008 标准定义的64bit浮点格式存储number,按照IEEE 754的定义: decimal64对应的整形部分长度为10,小数部分长度为16,所以默认的计算结果为“7.0000000000000001”,如最后一个小数为0,则取1作为有效数字标志.
面试题目如下:
实际调试如下
运行结果
所以:你们会发现0.1+0.2 是不等于0.3的;
那么这个问题如何解决呢?
解决方案 :用toFixed函数指定一下小数点精度;
[(two-one).toFixed(2)==one.toFixed(2),
(eight-six).toFixed(2)==two.toFixed(2)]
调试结果:
运行结果: