博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
js浮点数丢失问题
阅读量:7217 次
发布时间:2019-06-29

本文共 642 字,大约阅读时间需要 2 分钟。

why 0.1 + 0.2 = 0.30000000000000004 ?

这是js浮点精度丢失问题

  • 在js中,数字用Number类型表示。而其中一个数字是由64位组成。如下图说明:

  • 图片说明:

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

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

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

  1. 由于计算机无法对十进制直接运算,需要根据 IEEE 754 规范转成二进制。然后再进行对阶运算,这一转换过程中,精度会丢失一次。
0.1.toString(2) //"0.0001100110011001100110011001100110011001100110011001101"0.2.toString(2) //"0.001100110011001100110011001100110011001100110011001101"// 但是由于IEEE 754尾数位数限制,需要将后面多余的位截掉,这样在进制之间的转换中精度已经损失。复制代码
  1. 对阶运算
  • 由于指数位数不相同,运算时需要对阶运算 这部分也可能产生精度损失。
  • 按照上面两步运算(包括两步的精度损失),最后的结果是:0.0100110011001100110011001100110011001100110011001100
  • 再转换成十进制得 0.30000000000000004。

转载于:https://juejin.im/post/5cc99ecf6fb9a032471569ec

你可能感兴趣的文章
window service 恢复选项卡设置
查看>>
车辆管理系统之编码过程总结(十一)
查看>>
基于AOE网的关键路径的求解
查看>>
2017-5-16 python标准库
查看>>
浅谈游戏的声音处理-流播放文件 source
查看>>
旧版本转换成支持ARC版本
查看>>
创建与服务器的输入输出流
查看>>
string.hのmemmove的实现
查看>>
dicom网络通讯入门(1)
查看>>
日常训练.jpg
查看>>
iOS----KVC和KVO 详解
查看>>
2019寒假训练营第三次作业
查看>>
precision、recall、accuracy的概念
查看>>
PyTorch学习系列(九)——参数_初始化
查看>>
后缀树
查看>>
PowerDesigner执行SQL生成模型
查看>>
软件项目技术点(2)——Canvas之平移translate、旋转rotate、缩放scale
查看>>
软件项目技术点(25)——提升性能之检测绘制范围
查看>>
linux的基本操作1
查看>>
puppeteer 填充基础表单
查看>>