js加减乘除丢失精度问题解决方法
2023-06-13 09:15:26 时间
在javascript中,当你使用小数进行加减乘除运算时,你会发现,所得到的结果有时后面带有长长的一段小数,使运算变得复杂,并且影响计算结果。上网查询了一下原因,大致如下:在javascript中,带小数的数据运算时总会出现好多位小数.这是因为在javascript中浮点数的计算是以2进制计算的。
复制代码代码如下:
/**
*加法运算,避免数据相加小数点后产生多位数和计算精度损失。
*
*@paramnum1加数1|num2加数2
*/
functionnumAdd(num1,num2){
varbaseNum,baseNum1,baseNum2;
try{
baseNum1=num1.toString().split(".")[1].length;
}catch(e){
baseNum1=0;
}
try{
baseNum2=num2.toString().split(".")[1].length;
}catch(e){
baseNum2=0;
}
baseNum=Math.pow(10,Math.max(baseNum1,baseNum2));
return(num1*baseNum+num2*baseNum)/baseNum;
};
/**
*加法运算,避免数据相减小数点后产生多位数和计算精度损失。
*
*@paramnum1被减数|num2减数
*/
functionnumSub(num1,num2){
varbaseNum,baseNum1,baseNum2;
varprecision;//精度
try{
baseNum1=num1.toString().split(".")[1].length;
}catch(e){
baseNum1=0;
}
try{
baseNum2=num2.toString().split(".")[1].length;
}catch(e){
baseNum2=0;
}
baseNum=Math.pow(10,Math.max(baseNum1,baseNum2));
precision=(baseNum1>=baseNum2)?baseNum1:baseNum2;
return((num1*baseNum-num2*baseNum)/baseNum).toFixed(precision);
};
/**
*乘法运算,避免数据相乘小数点后产生多位数和计算精度损失。
*
*@paramnum1被乘数|num2乘数
*/
functionnumMulti(num1,num2){
varbaseNum=0;
try{
baseNum+=num1.toString().split(".")[1].length;
}catch(e){
}
try{
baseNum+=num2.toString().split(".")[1].length;
}catch(e){
}
returnNumber(num1.toString().replace(".",""))*Number(num2.toString().replace(".",""))/Math.pow(10,baseNum);
};
/**
*除法运算,避免数据相除小数点后产生多位数和计算精度损失。
*
*@paramnum1被除数|num2除数
*/
functionnumDiv(num1,num2){
varbaseNum1=0,baseNum2=0;
varbaseNum3,baseNum4;
try{
baseNum1=num1.toString().split(".")[1].length;
}catch(e){
baseNum1=0;
}
try{
baseNum2=num2.toString().split(".")[1].length;
}catch(e){
baseNum2=0;
}
with(Math){
baseNum3=Number(num1.toString().replace(".",""));
baseNum4=Number(num2.toString().replace(".",""));
return(baseNum3/baseNum4)*pow(10,baseNum2-baseNum1);
}
};
相关文章
- vue项目引入外部原生js文件_php引入文件的四个方法
- JS数组常用方法大全
- p5.js 变换操作
- 不想加班,你就背会这 10 条 JS 技巧
- html clipboard.js 现代化的拷贝复制文字
- JS事件捕获
- 使用 JS 操作 Redis:实现强大数据存储.(js调用redis)
- prototype的说明js类
- Js小数验证函数代码(基于正则)
- 用js判断页面刷新或关闭的方法(onbeforeunload与onunload事件)
- form表单中去掉默认的enter键提交并绑定js方法实现代码
- 关于js注册事件的常用方法
- js绑定事件this指向发生改变的问题解决方法
- js将控件隐藏的方法及display属性介绍
- js中单引号与双引号冲突问题解决方法
- js截取字符串的两种方法及区别详解
- js和php邮箱地址验证的实现方法
- JS方法调用括号的问题探讨
- php中给js数组赋值方法
- 引入autocomplete组件时JS报未结束字符串常量错误
- Ajax局部更新导致JS事件重复触发问题的解决方法
- php实现压缩多个CSS与JS文件的方法
- node.js中的path.basename方法使用说明
- node.js中的querystring.escape方法使用说明
- 让javascript加载速度倍增的方法(解决JS加载速度慢的问题)
- node.js中的http.response.end方法使用说明
- PHP采集静态页面并把页面css,img,js保存的方法
- Web表单提交之disabled问题js解决方法
- js实现class样式的修改、添加及删除的方法
- JS判断是否360安全浏览器极速内核的方法