北京总部

JavaScript培训:为什么0.1 + 0.2 = 0.30000000000000004?

作者: 来源: 时间: 2017-10-19 10:19:44

直接上图

浮点数的存储

为什么出现这种情况?首先要搞清楚 JavaScript 、如何存储小数。JavaScript 中所有数字包括整数和小数都只有一种类型 —Number。它的实现遵循 IEEE 754 标准,使用 64 位固定长度来表示,也就是标准的 double 双精度浮点数(相关的还有float 32位单精度)。


// 0.1 和 0.2 都转化成二进制后再进行运算 0.00011001100110011001100110011001100110011001100110011010 + 0.0011001100110011001100110011001100110011001100110011010 = 0.0100110011001100110011001100110011001100110011001100111 // 转成十进制正好是 0.30000000000000004

为什么 a = 0.1 能得到 0.1?

JavaScript最多能表示的精度为2^53=9007199254740992,它的长度是16。所以可以使用 toPrecision(16) 来做精度运算,超过的精度会自动做凑整处理。

0.10000000000000000555.toPrecision(16)// 返回0.1000000000000000,去掉末尾的0为0.1

如何让 0.1 + 0.2 = 0.3?

使用toPrecision()剔除后面浮点误差,精度取12更合适,使用parseFloat()剔除后面的0。

parseFloat(0.10000000000000000555.toPrecision(12)) === 0.1// true

封装方法

function strip(numprecision = 12) { return parseFloat(num.toPrecision(precision)) }

验证a + b

var a = 0.1, b = 0.2strip(a+b) // 0.3

相关阅读

更多

中软卓越java培训地址:北京市海淀区科学院南路2号融科资讯中心C座北楼12层 联系电话:400-666-3775 邮箱账号:etc-marketing@chinasofti.com

©2008-2016 北京中软国际教育科技股份有限公司 京ICP备14058756号-2