xc-app/utils/mathUtils.js

56 lines
2.7 KiB
JavaScript
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/* js 数学运算,精度问题处理 */
/*
函数,加法函数,用来得到精确的加法结果
说明javascript的加法结果会有误差在两个浮点数相加的时候会比较明显。这个函数返回较为精确的加法结果。
参数arg1第一个加数arg2第二个加数d要保留的小数位数可以不传此参数如果不传则不处理小数位数
调用mathAdd(arg1,arg2,d)
返回值:两数相加的结果
*/
export function mathAdd (arg1, arg2) {
arg1 = arg1.toString(), arg2 = arg2.toString();
var arg1Arr = arg1.split("."), arg2Arr = arg2.split("."), d1 = arg1Arr.length == 2 ? arg1Arr[1] : "", d2 = arg2Arr.length == 2 ? arg2Arr[1] : "";
var maxLen = Math.max(d1.length, d2.length);
var m = Math.pow(10, maxLen);
var result = Number(((arg1 * m + arg2 * m) / m).toFixed(maxLen));
var d = arguments[2];
return typeof d === "number" ? Number((result).toFixed(d)) : result;
}
/*
函数:减法函数,用来得到精确的减法结果
说明:函数返回较为精确的减法结果。
参数arg1第一个加数arg2第二个加数d要保留的小数位数可以不传此参数如果不传则不处理小数位数
调用mathSub(arg1,arg2)
返回值:两数相减的结果
*/
export function mathSub (arg1, arg2) {
return mathAdd(arg1, -Number(arg2), arguments[2]);
}
/*
函数:乘法函数,用来得到精确的乘法结果
说明:函数返回较为精确的乘法结果。
参数arg1第一个乘数arg2第二个乘数d要保留的小数位数可以不传此参数如果不传则不处理小数位数)
调用mathMul(arg1,arg2)
返回值:两数相乘的结果
*/
export function mathMul (arg1, arg2) {
var r1 = arg1.toString(), r2 = arg2.toString(), m, resultVal, d = arguments[2];
m = (r1.split(".")[1] ? r1.split(".")[1].length : 0) + (r2.split(".")[1] ? r2.split(".")[1].length : 0);
resultVal = Number(r1.replace(".", "")) * Number(r2.replace(".", "")) / Math.pow(10, m);
return typeof d !== "number" ? Number(resultVal) : Number(resultVal.toFixed(parseInt(d)));
}
/*
函数:除法函数,用来得到精确的除法结果
说明:函数返回较为精确的除法结果。
参数arg1除数arg2被除数d要保留的小数位数可以不传此参数如果不传则不处理小数位数)
调用mathDiv(arg1,arg2)
返回值arg1除于arg2的结果
*/
export function mathDiv (arg1, arg2) {
var r1 = arg1.toString(), r2 = arg2.toString(), m, resultVal, d = arguments[2];
m = (r2.split(".")[1] ? r2.split(".")[1].length : 0) - (r1.split(".")[1] ? r1.split(".")[1].length : 0);
resultVal = Number(r1.replace(".", "")) / Number(r2.replace(".", "")) * Math.pow(10, m);
return typeof d !== "number" ? Number(resultVal) : Number(resultVal.toFixed(parseInt(d)));
}