|
@@ -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);
|
|
|
+ }
|
|
|
+}
|