|  | @@ -0,0 +1,69 @@
 | 
	
		
			
				|  |  | +/**
 | 
	
		
			
				|  |  | + * Created by jimiz on 2017/3/28.
 | 
	
		
			
				|  |  | + */
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +var scMathUtil = {
 | 
	
		
			
				|  |  | +    innerRoundTo: function(num, digit){
 | 
	
		
			
				|  |  | +        var lFactor = Math.pow(10, digit);
 | 
	
		
			
				|  |  | +        var fOffSet;
 | 
	
		
			
				|  |  | +        if (num > 0){
 | 
	
		
			
				|  |  | +            fOffSet = 0.5;
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        else{
 | 
	
		
			
				|  |  | +            fOffSet = -0.5;
 | 
	
		
			
				|  |  | +        };
 | 
	
		
			
				|  |  | +        var result = Math.floor((num / lFactor) + fOffSet).toString();
 | 
	
		
			
				|  |  | +        var iLength = result.length;
 | 
	
		
			
				|  |  | +        var r1 = result.substring(0, iLength + digit);
 | 
	
		
			
				|  |  | +        var r2 = result.substring(iLength + digit, iLength);
 | 
	
		
			
				|  |  | +        return Number(r1 + '.' + r2);
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    floatToBin: function(num) {
 | 
	
		
			
				|  |  | +        return num.toString(2);
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    binToFloat: function(bin) {
 | 
	
		
			
				|  |  | +        var result = 0;
 | 
	
		
			
				|  |  | +        var iLength = bin.length;
 | 
	
		
			
				|  |  | +        var iDot = bin.indexOf('.');
 | 
	
		
			
				|  |  | +        if (iDot >= 0) {
 | 
	
		
			
				|  |  | +            for (var i = 0; i < iLength; i++) {
 | 
	
		
			
				|  |  | +                var num = Number(bin[i]);
 | 
	
		
			
				|  |  | +                var idx = iDot - i;
 | 
	
		
			
				|  |  | +                if (idx === 0) {
 | 
	
		
			
				|  |  | +                    continue
 | 
	
		
			
				|  |  | +                };
 | 
	
		
			
				|  |  | +                if (idx > 0) {
 | 
	
		
			
				|  |  | +                    idx -= 1
 | 
	
		
			
				|  |  | +                };
 | 
	
		
			
				|  |  | +                var r = Math.pow(2, idx);
 | 
	
		
			
				|  |  | +                result += num * r;
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +        }
 | 
	
		
			
				|  |  | +        else {
 | 
	
		
			
				|  |  | +            result = parseInt(bin, 2);
 | 
	
		
			
				|  |  | +        };
 | 
	
		
			
				|  |  | +        return result;
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    incMantissa: function(bin){
 | 
	
		
			
				|  |  | +        var result = bin;
 | 
	
		
			
				|  |  | +        var iDot = bin.indexOf('.');
 | 
	
		
			
				|  |  | +        if (iDot < 0){return result};
 | 
	
		
			
				|  |  | +        var iLength = bin.length;
 | 
	
		
			
				|  |  | +        for (var i = iLength - 1; i > iDot; i--){
 | 
	
		
			
				|  |  | +            var num = Number(bin[i]);
 | 
	
		
			
				|  |  | +            if (num === 0){
 | 
	
		
			
				|  |  | +                num = 1;
 | 
	
		
			
				|  |  | +                var bin1 = bin.substring(0, i);
 | 
	
		
			
				|  |  | +                var bin2 = bin.substring(i + 1, iLength);
 | 
	
		
			
				|  |  | +                result = bin1 + num.toString() + bin2;
 | 
	
		
			
				|  |  | +                break;
 | 
	
		
			
				|  |  | +            }
 | 
	
		
			
				|  |  | +
 | 
	
		
			
				|  |  | +        };
 | 
	
		
			
				|  |  | +        return result;
 | 
	
		
			
				|  |  | +    },
 | 
	
		
			
				|  |  | +    roundTo: function(num, digit){
 | 
	
		
			
				|  |  | +        var me = this;
 | 
	
		
			
				|  |  | +        return me.innerRoundTo(me.binToFloat(me.incMantissa(me.floatToBin(num))), digit);
 | 
	
		
			
				|  |  | +    }
 | 
	
		
			
				|  |  | +}
 |