js處理小數加減乘除法計算精度問題

先根據小數點的位數,把小數擴大適當的倍數,

	 /**
     * 計算需要乘以的倍數
     */
    var getMaxBaseNum = function(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;
        }
        return baseNum = Math.pow(10, Math.max(baseNum1, baseNum2));
    }

加法

    /**
     * 解決js小數加法計算的bug
     */
    var addition = function (num1, num2) {
    	if(exports.isNumEmpty(num1)){
    		num1 = "0";
    	}
    	if(exports.isNumEmpty(num2)){
    		num2 = "0";
    	}
        var baseNum = getMaxBaseNum(num1, num2);
        return (num1 * baseNum + num2 * baseNum) / baseNum;
    };

減法

    /**
     * 解決js小數減法計算的bug
     */
    var subtraction = function (num1, num2) {
    	if(exports.isNumEmpty(num1)){
    		num1 = "0";
    	}
    	if(exports.isNumEmpty(num2)){
    		num2 = "0";
    	}
        var baseNum = getMaxBaseNum(num1, num2);
        return (num1 * baseNum - num2 * baseNum) / baseNum;
    };

乘法

	/**
	 *乘法 精確計算
	 */
	var multiply = function (params1,params2){
		if(!params1){
			params1 = 0;
		}
		if(!params2){
			params2 = 0;
		}
	    var m=0;
	    var s1=params1.toString();
	    var s2=params2.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) ;
	};

java版實現方法地址:https://blog.csdn.net/dhj199181/article/details/95942014

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章