0.1 + 0.2 = 0.30000000000000004
0.8 - 0.6 = 0.20000000000000007
因为计算机读懂的是二进制,而不是十进制

把 0.1 和 0.2 转换成二进制看看:
0.1 => 0.0001 1001 1001 1001…(无限循环)
0.2 => 0.0011 0011 0011 0011…(无限循环)
双精度浮点数的小数部分最多支持 52 位,所以两者相加之后得到一串 0.0100 1100 1100 1100 1100 1100 1100 1100 1100 1100 1100 1100 1100 因浮点数小数位的限制而截断的二进制数字

转换为十进制,就成了 0.30000000000000004

为了避免产生精度差异,我们要把需要计算的数字乘以 10 的 n 次幂,换算成计算机能够精确识别的整数,然后再除以 10 的 n 次幂

    var a = 0.1;var b = 0.2;var c = 60;var d = 0.01;var e = 60;function jisuan(){console.log( a+ b);console.log( c+d+e);}jisuan();
//避免数字计算精度误差
Math.formatFloat = function(f, digit) { var m = Math.pow(10, digit); return parseInt(f * m, 10) / m;
}
console.log( Math.formatFloat(a+b, 1) );
console.log( Math.formatFloat(c+d+e, 2) );

追加[加法和乘法]  =============
function addNum(a, b) {var c, d, e;try {c = a.toString().split(".")[1].length;} catch (f) {c = 0;}try {d = b.toString().split(".")[1].length;} catch (f) {d = 0;}return e = Math.pow(10, Math.max(c, d)), (mulNum(a, e) + mulNum(b, e)) / e;
}function mulNum(a, b) {var c = 0,d = a.toString(),e = b.toString();try {c += d.split(".")[1].length;} catch (f) {}try {c += e.split(".")[1].length;} catch (f) {}return Number(d.replace(".", "")) * Number(e.replace(".", "")) / Math.pow(10, c);
}

避免数字计算精度误差的方法详解相关推荐

  1. python判断输入数字大于0,对python 判断数字是否小于0的方法详解

    对python 判断数字是否小于0的方法详解 为了精度更准确 可以使用数字的绝对值 < 1.0e-16  或者 < 1.0e-8来对比 abs(Num) 以上这篇对python 判断数字是 ...

  2. c语言字母输出什么意思,C语言中字符的输入输出以及计算字符个数的方法详解...

    C语言字符输入与输出 标准库提供的输入/输出模型非常简单.无论文本从何处输入,输出到何处,其输入/输出都是按照字符流的方式处理.文本流是由多行字符构成的字符序列,而每行字符则由 0 个或多个字符组成, ...

  3. javascript写css样式,原生javascript实现读写CSS样式的方法详解

    原生javascript实现读写CSS样式的方法详解 发布于 2017-05-24 15:05:31 | 120 次阅读 | 评论: 0 | 来源: 网友投递 JavaScript客户端脚本语言Jav ...

  4. 数字内置方法详解(int/long/float/complex)

    一.常用方法 1.1.int 以下是Python2.7的int内置函数: 序号 函数名 作用 举例 1 int.bit_length() 二进制存储这个整数至少需要多少bit(位). >> ...

  5. python中backward_pytorch的梯度计算以及backward方法详解

    基础知识 tensors: tensor在pytorch里面是一个n维数组.我们可以通过指定参数reuqires_grad=True来建立一个反向传播图,从而能够计算梯度.在pytorch中一般叫做d ...

  6. c语言 数字分离编程,C++ 整数拆分方法详解

    一.问题背景 整数拆分,指把一个整数分解成若干个整数的和 如 3=2+1=1+1+1 共2种拆分 我们认为2+1与1+2为同一种拆分 二.定义 在整数n的拆分中,最大的拆分数为m,我们记它的方案数为 ...

  7. python支持向量机回归_Python中支持向量机SVM的使用方法详解

    除了在Matlab中使用PRTools工具箱中的svm算法,Python中一样可以使用支持向量机做分类.因为Python中的sklearn库也集成了SVM算法,本文的运行环境是Pycharm. 一.导 ...

  8. python的装饰器迭代器与生成器_python3 装饰器、列表生成器、迭代器、内置方法详解等(第四周)...

    前言: 为什么要学习python3? 原因: 1.学习一门语言能力 2.通过该语言能力完成测试自动化以及独立完成自测框架知识 那么我要做什么呢? 1.每天花十个小时完成python3的学习 要在什么地 ...

  9. Java8-5-Function函数式接口进阶与默认方法详解

    Java8-5-函数式接口进阶与默认方法详解 上一篇我们快速的借助示例演示了stream api的简单应用,体会到了使用stream api对集合处理的便捷和其与函数式接口密不可分的关系,所以为了更高 ...

最新文章

  1. R语言包_Matrix
  2. SolrJ查询Solr数据
  3. MTK6589下传感器框架结构和代码分析以及传感器的参数指标
  4. 树莓派:交叉编译,以及带wiringPi库的如何交叉编译
  5. Linux 备份及恢复 Linux 文件权限
  6. c++远征之模板篇——运算符重载
  7. HashMap 源码
  8. 功能强大的国外商业PHP在线教育系统LMS源码/直播课程系统
  9. 微信iOS版上线新功能:输入文字又变得容易一点了
  10. Node.js package.json
  11. 深度学习中的数据增强方法
  12. 服务器ibmc无法加载js文件,引入网络js
  13. spring与jpa整合 简化persistence.xml配置文件 使用属性文件 数据源dbcp访问数据库...
  14. 关于计算机Excel中的试题,2015年职称计算机考试EXCEL练习试题及答案
  15. JUnit 单元测试多线程测试解决方法
  16. matlab设计匹配滤波器,利用MATLAB实现匹配滤波器的仿真验证
  17. 公众号订阅号如何赚钱
  18. 如何使用浏览器的网页全文翻译工具
  19. Python AutoCAD 绘图
  20. C# 工具类分享(7~14)

热门文章

  1. 全网最具深度的三次握手、四次挥手讲解,知乎上已获万赞
  2. 【分享】一些很棒的在线作图网站
  3. 2.使用insightface读取视频进行人脸识别
  4. mongodb集群原理
  5. miui10 android 唤醒,小米再次推送MIUI10最新版,修复小爱同学唤醒功能,没理由不升级...
  6. Homestead 发布
  7. pdf在线转换word
  8. 毕业设计计算机画册怎么做,问题:我们的毕业设计是制作一个宣传画册,那怎样才算是一个好的宣传画册呢...
  9. 【图像融合】基于matlab稀疏表示多光谱图像融合【含Matlab源码 1301期】
  10. 头歌实践教学平台数据结构与算法链式线性表——课上练