javascript小数精度丢失的完美解决方法


Posted in Javascript onMay 31, 2016

原因:js按照2进制来处理小数的加减乘除,在arg1的基础上 将arg2的精度进行扩展或逆扩展匹配,所以会出现如下情况.

javascript(js)的小数点加减乘除问题,是一个js的bug如0.3*1 = 0.2999999999等,下面列出可以完美求出相应精度的四种js算法

function accDiv(arg1,arg2){  
 var t1=0,t2=0,r1,r2;  
 try{t1=arg1.toString().split(".")[1].length}catch(e){}  
 try{t2=arg2.toString().split(".")[1].length}catch(e){}  
 with(Math){  
 r1=Number(arg1.toString().replace(".",""))  
 r2=Number(arg2.toString().replace(".","")) 
 return accMul((r1/r2),pow(10,t2-t1));  
 }  
 }  /* 何问起 hovertree.com */
 //乘法 
 function accMul(arg1,arg2)  
 {  
 var m=0,s1=arg1.toString(),s2=arg2.toString();  
 try{m+=s1.split(".")[1].length}catch(e){}  
 try{m+=s2.split(".")[1].length}catch(e){}  
 return Number(s1.replace(".",""))*Number(s2.replace(".",""))/Math.pow(10,m)  
 }  
//加法  
function accAdd(arg1,arg2){  
var r1,r2,m;  
try{r1=arg1.toString().split(".")[1].length}catch(e){r1=0}  
try{r2=arg2.toString().split(".")[1].length}catch(e){r2=0}  
m=Math.pow(10,Math.max(r1,r2))  
return (arg1*m+arg2*m)/m  
}  
//减法  
function Subtr(arg1,arg2){ 
  var r1,r2,m,n; 
  try{r1=arg1.toString().split(".")[1].length}catch(e){r1=0} 
  try{r2=arg2.toString().split(".")[1].length}catch(e){r2=0} 
  m=Math.pow(10,Math.max(r1,r2)); 
  n=(r1>=r2)?r1:r2; 
  return ((arg1*m-arg2*m)/m).toFixed(n); 
}

以上这篇javascript小数精度丢失的完美解决方法就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
基于jQuery实现图片的前进与后退功能
Apr 24 Javascript
js Array对象的扩展函数代码
Apr 24 Javascript
输入自动提示搜索提示功能的使用说明:sugggestion.txt
Sep 02 Javascript
js通过location.search来获取页面传来的参数
Sep 11 Javascript
详谈jQuery操纵DOM元素属性 attr()和removeAtrr()方法
Jan 22 Javascript
获取IE浏览器Cookie信息的方法
Jan 23 Javascript
浅谈webpack 自动刷新与解析
Apr 09 Javascript
使用JavaScript生成罗马字符的实例代码
Jun 08 Javascript
angular6.0开发教程之如何安装angular6.0框架
Jun 29 Javascript
jQuery实现基本淡入淡出效果的方法详解
Sep 05 jQuery
js replace替换字符串同时替换多个方法
Nov 27 Javascript
vue 页面跳转的实现方式
Jan 12 Vue.js
javascript解决小数的加减乘除精度丢失的方案
May 31 #Javascript
javascript基本语法
May 31 #Javascript
jquery 无限极下拉菜单的简单实例(精简浓缩版)
May 31 #Javascript
通用无限极下拉菜单的实现代码
May 31 #Javascript
JavaScript+Java实现HTML页面转为PDF文件保存的方法
May 30 #Javascript
详解JavaScript中双等号引起的隐性类型转换
May 30 #Javascript
JavaScript中的操作符类型转换示例总结
May 30 #Javascript
You might like
全文搜索和替换
2006/10/09 PHP
Codeigniter注册登录代码示例
2014/06/12 PHP
php实现替换手机号中间数字为*号及隐藏IP最后几位的方法
2016/11/16 PHP
PHP实现登陆并抓取微信列表中最新一组微信消息的方法
2017/07/10 PHP
PHPstorm快捷键(分享)
2017/07/17 PHP
使用PHP反射机制来构造"CREATE TABLE"的sql语句
2019/03/21 PHP
cnblogs TagCloud基于jquery的实现代码
2010/06/11 Javascript
Html中JS脚本执行顺序简单举例说明
2010/06/19 Javascript
JQuery创建DOM节点的方法
2015/06/11 Javascript
jquery实现点击展开列表同时隐藏其他列表
2015/08/10 Javascript
超精准的javascript验证身份证号的具体实现方法
2015/11/18 Javascript
jQuery实现的自定义滚动条实例详解
2016/09/20 Javascript
javascript中对象的定义、使用以及对象和原型链操作小结
2016/12/14 Javascript
微信小程序 template模板详解及实例代码
2017/03/09 Javascript
js实现自动图片轮播代码
2017/03/22 Javascript
Angular模板表单校验方法详解
2017/08/11 Javascript
Js利用console计算代码运行时间的方法示例
2017/09/24 Javascript
基于rollup的组件库打包体积优化小结
2018/06/18 Javascript
vue-cli脚手架build目录下utils.js工具配置文件详解
2018/09/14 Javascript
Vue数据驱动表单渲染,轻松搞定form表单
2019/07/19 Javascript
vue回到顶部监听滚动事件详解
2019/08/02 Javascript
[31:29]完美世界DOTA2联赛PWL S3 INK ICE vs Magma 第一场 12.20
2020/12/23 DOTA
Python中函数及默认参数的定义与调用操作实例分析
2017/07/25 Python
为什么你还不懂得怎么使用Python协程
2019/05/13 Python
wxpython+pymysql实现用户登陆功能
2019/11/19 Python
Python编写memcached启动脚本代码实例
2020/08/14 Python
纽约现代艺术博物馆商店:MoMA STORE(室内家具和杂货商品)
2016/08/02 全球购物
马来西亚最好的婴儿商店:Motherhood
2017/09/14 全球购物
SEPHORA丝芙兰德国官方购物网站:化妆品、护肤品和香水
2020/01/21 全球购物
成人高等教育毕业生自我鉴定
2013/10/22 职场文书
大学生应聘求职信
2014/05/26 职场文书
初三学生语文考试作弊检讨书
2014/12/14 职场文书
先进教师事迹材料
2014/12/16 职场文书
防溺水主题班会教案
2015/08/12 职场文书
Python基础详解之描述符
2021/04/28 Python
python小型的音频操作库mp3Play
2022/04/24 Python