解决js小数加减法精确度问题
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小数加减法精确度问题相关推荐
- JS 小数精度完美解决(前提是已知小数位数)
JS 小数精度完美解决(前提是已知小数位数) 前端JavaScript语言在小数运算时经常出现小数精度缺失,现在对已知小数位数的运算解决方法记录一下 以两位小数举例: var a = 1.02 var ...
- js小数运算出现多为小数问题_js小数计算小数点后显示多位小数的实现方法
首先写一个demo 重现问题,我使用的是一个js在线测试环境[打开] 改写displaynum()函数 function displaynum(){var num = 22.77;alert(num ...
- JS--使用第三方库解决浮点数(小数)计算不准确的问题
原文网址:JS--使用第三方库解决浮点数(小数)计算不准确的问题_IT利刃出鞘的博客-CSDN博客 简介 本文介绍如何解决JavaScript在计算浮点数(小数)时不准确(精度丢失)的问题. 问题描述 ...
- 解决js跨域调用WebApi的问题
解决js跨域调用WebApi的问题 参考文章: (1)解决js跨域调用WebApi的问题 (2)https://www.cnblogs.com/qubernet/p/6396295.html 备忘一下 ...
- js浮点数精度丢失问题及如何解决js中浮点数计算不精准
js浮点数精度丢失问题及如何解决js中浮点数计算不精准 参考文章: (1)js浮点数精度丢失问题及如何解决js中浮点数计算不精准 (2)https://www.cnblogs.com/ranyonsu ...
- 解决JS在url中传递参数时参数包含中文乱码的问题
解决JS在url中传递参数时参数包含中文乱码的问题 参考文章: (1)解决JS在url中传递参数时参数包含中文乱码的问题 (2)https://www.cnblogs.com/xushengguan/ ...
- firefox如何载入json文件_如何去解决JS跨域问题 怎么能学好Web前端开发
如何去解决JS跨域问题?怎么能学好Web前端开发?JavaScript跨域是指通过JS在不同的域之间进行数据传输或通信,比如用ajax向一个不同的域请求数据,或者通过JS获取页面中不同域的框架中(if ...
- jsonp-反向代理-CORS解决JS跨域问题的个人总结
jsonp-反向代理-CORS解决JS跨域问题的个人总结 网上说了很多很多,但是看完之后还是很混乱,所以我自己重新总结一下. 解决 js 跨域问题一共有8种方法, jsonp(只支持 get) 反向代 ...
- html动态资源加载进度,JavaScript_快速解决js动态改变dom元素属性后页面及时渲染的问题,今天实现一个进度条加载过程 - phpStudy...
快速解决js动态改变dom元素属性后页面及时渲染的问题 今天实现一个进度条加载过程,dom结构其实就是两个div 控制里层div的宽width属性,就能实现进度条往前走的效果. 我的进度条是显示下载文 ...
最新文章
- java.lang AAPT_android R.java aapt
- java-buildpack源码分析之Compile
- Spring Cloud 学习笔记(四)-Spring Cloud Hystrix
- 20189216 2018-2019-2 《密码与安全新技术专题》第七次作业
- TCP:SEQ号与ACK号
- poj 3468 A Simple Problem with Integers(线段树区区)
- 第3章 Python 数字图像处理(DIP) - 灰度变换与空间滤波13 - 平滑低通滤波器 -盒式滤波器核
- 【2018-01-28】HTML-布局
- 【原】常见的模块,你语义化了没
- dwz怎么使用数据加载中提示_SOLIDWORKS在使用中提示内存不足怎么办?
- opencv注释中的@brief、@code/@endcode、@param、@sa 以及 如何在pycharm中看到opencv函数的完整注释
- 杭州有哪些牛批的互联网公司
- python将pdf转成excel_wpspdf转换成excel Python转换PPT为PDF
- 密室逃脱实体店怎么吸引客户?这几招教你实现线上引流转化!
- 【游记】CSP2021-试手记
- Xilinx ISE 千兆以太网通信基础
- 用jQuery实现9宫格抽奖
- 01.朴素贝叶斯介绍
- 配置OSPF认证【eNSP实现】
- 面向对象程序设计(Java) chapter9
热门文章
- pycharm debug 提示 Python Debugger Extension Available Cython extension speeds up Python debugging
- badge 不显示 badges 不显示(Bootstrap 徽章)问题
- Springboot 整合Websocket+Stomp协议+RabbitMQ做消息代理 实例教程
- 1023 : 大小写转换
- Python数据可视化第四节-图表样式美化实例
- QT-QMainWindow布局设置
- 程序员可选择的个博客论坛网站
- Outlook代收发其他邮箱(gmail, qqmail, aliyun, 163)
- 每日启程——2019.12.11日(草木有本心,何求美人折)
- 联想 小新 pro13 笔记本 扩展坞 HDMI 外接显示器 失败 无反应