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;


声明:本站所有文章,如无特殊说明或,均为原创发布。商业转载请联系作者获得授权,非商业转载请注明出处。本站所有图片如无特殊说明均为AI生成。
真诚赞赏,手留余香
赞赏
MySQL
MySQL 删除逗号分隔字段中的某一个值
2023-07-04
CSS,JavaScript
JavaScript 和 CSS 检测横屏适配
2023-07-21
Jone
在什么样的花园里面,挖呀挖呀挖
种什么样的种子,开什么样的花
随机推荐
CSS 媒体特性 prefers-color-scheme
MySQL DATETIME 时间查询和转换
TypeScript 和 Koa 实践
Linux 中 top 命令的 Load Average 含义
Debian11 安装笔记2:编译安装PHP
CSS 滚动条样式修改
Node.js 使用 Jest 做单元测试
Vue3 挂载全局方法
Debian11 安装笔记4:安装常用软件
Node.js 控制台进度条实现原理

微信联系我

夜间模式切换
回到顶部