Procházet zdrojové kódy

完善roundTo对负数的支持

zhangyin před 8 roky
rodič
revize
379885e5bd
2 změnil soubory, kde provedl 15 přidání a 10 odebrání
  1. 14 9
      public/web/scMathUtil.js
  2. 1 1
      test/unit/public/testScMath.js

+ 14 - 9
public/web/scMathUtil.js

@@ -5,18 +5,17 @@
 var scMathUtil = {
     innerRoundTo: function(num, digit){
         var lFactor = Math.pow(10, digit);
-        var fOffSet;
-        if (num > 0){
-            fOffSet = 0.5;
+        var fOffSet = 0.5;
+        var sign = '';
+        if (num < 0){
+            sign = '-';
+            num = Math.abs(num);
         }
-        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);
+        return Number(sign + r1 + '.' + r2);
     },
     floatToBin: function(num) {
         return num.toString(2);
@@ -24,6 +23,12 @@ var scMathUtil = {
     binToFloat: function(bin) {
         var result = 0;
         var iLength = bin.length;
+        var sign = '';
+        if (iLength > 0 && bin[0]==='-'){
+            sign = '-';
+            bin = bin.substring(1, iLength);
+        }
+        iLength = bin.length;
         var iDot = bin.indexOf('.');
         if (iDot >= 0) {
             for (var i = 0; i < iLength; i++) {
@@ -42,7 +47,7 @@ var scMathUtil = {
         else {
             result = parseInt(bin, 2);
         };
-        return result;
+        return sign + result;
     },
     incMantissa: function(bin){
         var result = bin;
@@ -66,4 +71,4 @@ var scMathUtil = {
         var me = this;
         return me.innerRoundTo(me.binToFloat(me.incMantissa(me.floatToBin(num))), digit);
     }
-}
+};

+ 1 - 1
test/unit/public/testScMath.js

@@ -5,6 +5,6 @@ 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.equal(scMathUtil.roundTo(-3.12345, -2), -3.12);
     t.end();
 })