js精度丢失解决办法
2024-10-13 17:39:06
/**
* 加法运算,避免数据相加小数点后产生多位数和计算精度损失。
*
* @param num1加数1 | num2加数2
*/
function numAdd(num1, num2) {
var baseNum, 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;
};
/**
* 加法运算,避免数据相减小数点后产生多位数和计算精度损失。
*
* @param num1被减数 | num2减数
*/
function numSub(num1, num2) {
var baseNum, baseNum1, baseNum2;
var precision;// 精度
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);
};
/**
* 乘法运算,避免数据相乘小数点后产生多位数和计算精度损失。
*
* @param num1被乘数 | num2乘数
*/
function numMulti(num1, num2) {
var baseNum = 0;
try {
baseNum += num1.toString().split(".")[1].length;
} catch (e) {
}
try {
baseNum += num2.toString().split(".")[1].length;
} catch (e) {
}
return Number(num1.toString().replace(".", "")) * Number(num2.toString().replace(".", "")) / Math.pow(10, baseNum);
};
/**
* 除法运算,避免数据相除小数点后产生多位数和计算精度损失。
*
* @param num1被除数 | num2除数
*/
function numDiv(num1, num2) {
var baseNum1 = 0, baseNum2 = 0;
var baseNum3, 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);
}
};
最新文章
- vs2013 遇到的web性能记录器无法使用问题
- 安卓手机开机开启指定Activity
- HT图形组件设计之道(三)
- PHP基础18:require和include
- PHP接口类interface的正确使用方法
- Button控件
- RIME输入法
- c/c++的函数参数压栈顺序
- 访问 Tomcat支配项目去除项目名和端口号通过IP地址(或域名)访问
- ehcache与redis的比较与应用场景分析(转)
- [Swift]LeetCode647. 回文子串 | Palindromic Substrings
- Django登录与注销
- 从零开始学习Java多线程(二)
- MySQL【数值处理函数】的使用方法
- 如何实现从Java入门到服务端项目开发的进阶?
- linux路由
- DWM1000 定位数据收发以及定位算法
- 440P 测试三星ssd840pro 512g
- windows下使用vscode编写运行以及调试Python
- 使用WebViewJavascriptBridge与UIWebView交互
热门文章
- iOS实现OAuth2.0中刷新access token并重新请求数据操作
- 28 Corn表达式详解 (转自http://blog.csdn.net/claram/article/details/51785193)
- [转]javascript函数定义表达式和函数声明的区别
- Android的消息处理机制(Looper,Handler,Message)(转)
- phpcms v9 二次开发 - 自己添加源文件
- Python自动化运维之2、运算符与数据类型
- template of class
- 如何用PowerPoint制作闪烁的星星
- 信息安全实验一:buffer-overflow
- 设置tableWidget->;verticalScrollBar()的属性