Bladeren bron

check in sc MathUtil for Dr. Zhang / test case

TonyKang 8 jaren geleden
bovenliggende
commit
908e230063
3 gewijzigde bestanden met toevoegingen van 96 en 0 verwijderingen
  1. 17 0
      public/scMathUtil.js
  2. 69 0
      public/web/scMathUtil.js
  3. 10 0
      test/unit/public/testScMath.js

+ 17 - 0
public/scMathUtil.js

@@ -0,0 +1,17 @@
+/**
+ * Created by Tony on 2017/4/14.
+ */
+const fs = require('fs');
+var scMath = null;
+
+getScMathUtil = function() {
+    if (!(scMath)) {
+        var data = fs.readFileSync(__dirname + '/web/scMathUtil.js', 'utf8', 'r');
+        //console.log(data);
+        eval(data);
+        scMath = scMathUtil;
+    }
+    return scMath;
+}
+
+exports.getUtil = getScMathUtil;

+ 69 - 0
public/web/scMathUtil.js

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

+ 10 - 0
test/unit/public/testScMath.js

@@ -0,0 +1,10 @@
+/**
+ * Created by Tony on 2017/4/14.
+ */
+var test = require('tape');
+var scMathUtil = require('../../../public/scMathUtil').getUtil();
+
+test('test smartcost math util for rounding', function(t){
+    t.equal(scMathUtil.roundTo(3.12345, -2), 3.12);
+    t.end();
+})