module.exports = {
	/**
	 * +
	 * @param arg1
	 * @param arg2
	 * @returns {number}
	 */
	add: function(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
	},
	/**
	 * -
	 * @param arg1
	 * @param arg2
	 * @returns {number}
	 */
	sub: function(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);
	},
	/**
	 *  *
	 * @param arg1
	 * @param arg2
	 * @returns {number}
	 */
	mul: function(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)
	},
	/**
	 * /
	 * @param arg1
	 * @param arg2
	 * @returns {number}
	 */
	div: function(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) {}
		r1 = Number(arg1.toString().replace(".", ""))
		r2 = Number(arg2.toString().replace(".", ""))
		return this.mul((r1 / r2), Math.pow(10, t2 - t1));
	},
	/**
	 * 保留有效小数位 四舍五入，解决toFixed方法bug
	 * @param num 需要操作的数字
	 * @param decimal 保留小数的位数
	 * @returns {string}
	 */
	toFixed: function(num, decimal) {
		if(typeof decimal == 'undefined'){
			decimal = 2;
		}
		var times = Math.pow(10, decimal)
		var des = num * times + 0.5
		des = (parseInt(des, 10) / times).toString()
		if(decimal > 0){
			var arr = des.split('.')
			var len = decimal;
			if(arr.length == 1){
				des += '.';
			}else{
				len = decimal - arr[1].length;
			}
			for (let i = 1; i <= len; i++) {
				des += '0';
			}
		}
		return des;
	},
};
