中软首页
●  教育部授予:“软件工程专业大学生实习实训基地”资质
●  商务部授予:“中国服务外包示范培训中心”资质
●  工信部授予:国家信息技术紧缺人才培养工程“521计划”资格
●  获得腾讯授予:中国IT教育十大影响力品牌

≡ 技术知识库
当前位置:网站首页>技术知识库>>文章内容
JavaScript培训:为什么0.1 + 0.2 = 0.30000000000000004?
作者:   来源:    时间:2017-10-19 10:21:58    字体:[大] [中] [小]

直接上图

浮点数的存储

为什么出现这种情况?首先要搞清楚 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


中软国际教育科技微网页二维码
版权所有 © 2008-2014 北京中软国际教育科技股份有限公司 京ICP备09078625号-2 京公安备11010802014778号 隐私声明 | 联系我们 | 网站地图

华东

华南

华中

华北

西北

西南

东北