JavaScript 中 0.1 加 0.2 不等于 0.3 的原因和解决方法

在 JavaScript 中直接输出 0.1 + 0.2 结果是 0.30000000000000004。


原因如下:

JavaScript 使用 Number类型表示数字(整数和浮点数),计算机遵循IEEE 754标准,所有语言都会有这个问题。

通常用64位来表示一个数字:

第0位:符号位,0表示正数,1表示负数(s);

第1位到第11位:储存指数部分(e);

第12位到第63位:储存小数部分(即有效数字)f。


十进制转换为二进制方法是,小数本身乘以2,取整数位作为二进制表示位,然后取其小数位参与计算(乘以2),如此循环往复,只至小数位乘以2的结果为零。

结果0.1和0.2的二进制,后面无限循环多余的数将会按一定规则进行舍入,最后只保留52位,将两个二进制数相加。

0.1的二进制:0.0 0011 0011 0011 0011...(无限循环)
0.2的二进制:0.0011 0011 0011 0011...(无限循环)


解决办法:化浮为整

浮点数的计算会出现这个问题,但是整数的计算就不会出现啊,把俩个小数换算为整数进行计算,再除以一个共同的倍数

var a = 0.1;
var b = 0.2;
a = a *10;
b = b *10;
var c = (a + b)/10;


声明:本站所有文章和图片,如无特殊说明,均为原创发布。商业转载请联系作者获得授权,非商业转载请注明出处。
随机推荐
WordPress 引入自定义 JavaScript 文件
Git 放弃本地修改,强制和之前的某次提交同步
Content Security Policy(CSP)简介
JavaScript 原型链
JavaScript 对象方法
MySQL 使用 DATE_FORMAT() 和 FROM_UNIXTIME() 格式化时间
Node.js 安装第三方模块
Node.js net 模块