You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

91 lines
2.4 KiB
JavaScript

1 year ago
/**
* @name 计算常用JS帮助类
* @remark 2015-03-11 改为模块化写法
*/
var calcHelper = (function(){
var _fixNum = 2;
/**
* 设置精度
* @param num 保留小数位
* @remark 因JS自身问题返回的数字跟保留的小数位不符1.00实际返回1
*/
var SetFixed = function (num){
if(isNaN(parseInt(num))){
_fixNum = 2;
} else {
_fixNum = parseInt(num);
}
};
/**
* 加法运算
* @param num1 数字1
* @param num2 数字2
* @return (num1 + num2)
*/
var Addition = function (num1, num2) {
var n1, n2;
try {
n1 = num1.toString().split(".")[1].length //获取数1小数部位的长度
} catch (e) { n1 = 0; }
try {
n2 = num2.toString().split(".")[1].length //获取数2小数部位的长度
} catch (e) { n2 = 0; }
//计算最大长度得到10的N次方
var pow = Math.pow(10, Math.max(n1, n2));
//将两个因数升级为10的N次方形式进行相加最后再还原为10的倒N次方得出的就是无损数据
var result = (Multiplication(num1, pow) + Multiplication(num2, pow)) / pow;
return parseFloat(result.toFixed(_fixNum));
};
/**
* 减法运算
* @param num1 数字1
* @param num2 数字2
* @return (num1 - num2)
*/
var Subtraction = function (num1, num2) {
return this.Addition(num1, -num2);
};
/**
* 乘法运算
* @param num1 数字1
* @param num2 数字2
* @return (num1 * num2)
*/
var Multiplication = function (num1, num2) {
var square = 0; //次方数
var n1 = num1.toString();
var n2 = num2.toString();
try {
square += n1.split(".")[1].length;
} catch (ex) { }
try {
square += n2.split(".")[1].length;
} catch (ex) { }
var result = Number(n1.replace(".", "")) * Number(n2.replace(".", "")) / Math.pow(10, square);
return parseFloat(result.toFixed(_fixNum));
};
/**
* 除法运算
* @param num1 数字1
* @param num2 数字2
* @return (num1 / num2)
*/
var Division = function (num1, num2) {
return this.Multiplication(num1, 1 / num2);
};
return {
SetFixed : SetFixed,
Addition : Addition,
Subtraction : Subtraction,
Multiplication : Multiplication,
Division : Division
};
})();