js浮点数计算时,出现多位小数的bug,下面是例子:

0.1+0.2 // 0.30000000000000004
0.3-0.2  // 0.09999999999999998

解决办法,封装两个通用方法,如下所示:

//自定义加法运算
function addNum(arg1, arg2) {var r1, r2, m, c;try {r1 = arg1.toString().split(".")[1].length;} catch (e) {r1 = 0;}try {r2 = arg2.toString().split(".")[1].length;} catch (e) {r2 = 0;}c = Math.abs(r1 - r2);m = Math.pow(10, Math.max(r1, r2));if (c > 0) {var cm = Math.pow(10, c);if (r1 > r2) {arg1 = Number(arg1.toString().replace(".", ""));arg2 = Number(arg2.toString().replace(".", "")) * cm;} else {arg1 = Number(arg1.toString().replace(".", "")) * cm;arg2 = Number(arg2.toString().replace(".", ""));}} else {arg1 = Number(arg1.toString().replace(".", ""));arg2 = Number(arg2.toString().replace(".", ""));}return (arg1 + arg2) / m;
};
alert(addNum(0.1, 0.2)); // 0.3
//自定义减法运算
function subtraction(arg1, arg2) {var r1, r2, m, c;try {r1 = arg1.toString().split(".")[1].length;} catch (e) {r1 = 0;}try {r2 = arg2.toString().split(".")[1].length;} catch (e) {r2 = 0;}c = Math.abs(r1 - r2);m = Math.pow(10, Math.max(r1, r2));if (c > 0) {var cm = Math.pow(10, c);if (r1 > r2) {arg1 = Number(arg1.toString().replace(".", ""));arg2 = Number(arg2.toString().replace(".", "")) * cm;} else {arg1 = Number(arg1.toString().replace(".", "")) * cm;arg2 = Number(arg2.toString().replace(".", ""));}} else {arg1 = Number(arg1.toString().replace(".", ""));arg2 = Number(arg2.toString().replace(".", ""));}return (arg1 - arg2) / m;
};
alert(subtraction(0.8,0.6)); // 0.2
以上的两个方法,可以有效地解决js浮点数计算时,出现多位小数的bug。

解决js小数加减法精确度问题相关推荐

  1. JS 小数精度完美解决(前提是已知小数位数)

    JS 小数精度完美解决(前提是已知小数位数) 前端JavaScript语言在小数运算时经常出现小数精度缺失,现在对已知小数位数的运算解决方法记录一下 以两位小数举例: var a = 1.02 var ...

  2. js小数运算出现多为小数问题_js小数计算小数点后显示多位小数的实现方法

    首先写一个demo 重现问题,我使用的是一个js在线测试环境[打开] 改写displaynum()函数 function displaynum(){var num = 22.77;alert(num ...

  3. JS--使用第三方库解决浮点数(小数)计算不准确的问题

    原文网址:JS--使用第三方库解决浮点数(小数)计算不准确的问题_IT利刃出鞘的博客-CSDN博客 简介 本文介绍如何解决JavaScript在计算浮点数(小数)时不准确(精度丢失)的问题. 问题描述 ...

  4. 解决js跨域调用WebApi的问题

    解决js跨域调用WebApi的问题 参考文章: (1)解决js跨域调用WebApi的问题 (2)https://www.cnblogs.com/qubernet/p/6396295.html 备忘一下 ...

  5. js浮点数精度丢失问题及如何解决js中浮点数计算不精准

    js浮点数精度丢失问题及如何解决js中浮点数计算不精准 参考文章: (1)js浮点数精度丢失问题及如何解决js中浮点数计算不精准 (2)https://www.cnblogs.com/ranyonsu ...

  6. 解决JS在url中传递参数时参数包含中文乱码的问题

    解决JS在url中传递参数时参数包含中文乱码的问题 参考文章: (1)解决JS在url中传递参数时参数包含中文乱码的问题 (2)https://www.cnblogs.com/xushengguan/ ...

  7. firefox如何载入json文件_如何去解决JS跨域问题 怎么能学好Web前端开发

    如何去解决JS跨域问题?怎么能学好Web前端开发?JavaScript跨域是指通过JS在不同的域之间进行数据传输或通信,比如用ajax向一个不同的域请求数据,或者通过JS获取页面中不同域的框架中(if ...

  8. jsonp-反向代理-CORS解决JS跨域问题的个人总结

    jsonp-反向代理-CORS解决JS跨域问题的个人总结 网上说了很多很多,但是看完之后还是很混乱,所以我自己重新总结一下. 解决 js 跨域问题一共有8种方法, jsonp(只支持 get) 反向代 ...

  9. html动态资源加载进度,JavaScript_快速解决js动态改变dom元素属性后页面及时渲染的问题,今天实现一个进度条加载过程 - phpStudy...

    快速解决js动态改变dom元素属性后页面及时渲染的问题 今天实现一个进度条加载过程,dom结构其实就是两个div 控制里层div的宽width属性,就能实现进度条往前走的效果. 我的进度条是显示下载文 ...

最新文章

  1. java.lang AAPT_android R.java aapt
  2. java-buildpack源码分析之Compile
  3. Spring Cloud 学习笔记(四)-Spring Cloud Hystrix
  4. 20189216 2018-2019-2 《密码与安全新技术专题》第七次作业
  5. TCP:SEQ号与ACK号
  6. poj 3468 A Simple Problem with Integers(线段树区区)
  7. 第3章 Python 数字图像处理(DIP) - 灰度变换与空间滤波13 - 平滑低通滤波器 -盒式滤波器核
  8. 【2018-01-28】HTML-布局
  9. 【原】常见的模块,你语义化了没
  10. dwz怎么使用数据加载中提示_SOLIDWORKS在使用中提示内存不足怎么办?
  11. opencv注释中的@brief、@code/@endcode、@param、@sa 以及 如何在pycharm中看到opencv函数的完整注释
  12. 杭州有哪些牛批的互联网公司
  13. python将pdf转成excel_wpspdf转换成excel Python转换PPT为PDF
  14. 密室逃脱实体店怎么吸引客户?这几招教你实现线上引流转化!
  15. 【游记】CSP2021-试手记
  16. Xilinx ISE 千兆以太网通信基础
  17. 用jQuery实现9宫格抽奖
  18. 01.朴素贝叶斯介绍
  19. 配置OSPF认证【eNSP实现】
  20. 面向对象程序设计(Java) chapter9

热门文章

  1. pycharm debug 提示 Python Debugger Extension Available Cython extension speeds up Python debugging
  2. badge 不显示 badges 不显示(Bootstrap 徽章)问题
  3. Springboot 整合Websocket+Stomp协议+RabbitMQ做消息代理 实例教程
  4. 1023 : 大小写转换
  5. Python数据可视化第四节-图表样式美化实例
  6. QT-QMainWindow布局设置
  7. 程序员可选择的个博客论坛网站
  8. Outlook代收发其他邮箱(gmail, qqmail, aliyun, 163)
  9. 每日启程——2019.12.11日(草木有本心,何求美人折)
  10. 联想 小新 pro13 笔记本 扩展坞 HDMI 外接显示器 失败 无反应