这个CompareAmounts函数究竟在做什么? (分析)

时间:2015-03-26 15:10:41

标签: javascript jquery regex function analysis

我正在分析一个很长的JS代码,但我是JS的新手。尽管我付出了最大的努力,但我只能分析大约85%的代码。这个功能CompareAmounts还在逃避我。这个JS应该在银行网页上运行,我无法理解这个功能在做什么。有人可以指出我的功能吗?

function CompareAmounts(a, b) {
        var c = /^\-/gi;
        var d = "";
        var e = "";
        if (a.match(c)) {
            a = a.replace(c, "");
            a = a.replace(".", "");
            a = a.split(",");
            a[0] = (parseInt(a[0]) - parseInt(b)).toString();
            if (parseInt(a[0]) < 0) {
                a[0] = (a[0] * -1).toString();
            } else {
                d = "-";
                e = "";
            }
        } else {
            a = a.replace(".", "");
            a = a.split(",");
            a[0] = (parseInt(a[0]) + parseInt(b)).toString();
        }
        if (a[0].length > 3) {
            var f = a[0].substr(0, a[0].length - 3);
            var g = a[0].substr(a[0].length - 3, a[0].length);
            a[0] = f + "." + g;
        }
        a = d + a.toString() + e;
        return a;
    }

1 个答案:

答案 0 :(得分:1)

将一个号码添加到另一个号码a + b是一种相当复杂的方式。

它包含额外的逻辑,用于将a解析为字符串形式的欧式数字(删除所有.,取出,之前的部分,然后重构结果之后的欧洲数字格式(a或结果大于999999时错误)。

它没有用于解析b的相同逻辑,因此我假设b作为数字值而不是字符串传入。

function CompareAmounts(a, b) {
  var c = /^\-/gi;
  var d = "";
  var e = "";
  if (a.match(c)) {
    a = a.replace(c, "");
    a = a.replace(".", "");
    a = a.split(",");
    a[0] = (parseInt(a[0]) - parseInt(b)).toString();
    if (parseInt(a[0]) < 0) {
      a[0] = (a[0] * -1).toString();
    } else {
      d = "-";
      e = "";
    }
  } else {
    a = a.replace(".", "");
    a = a.split(",");
    a[0] = (parseInt(a[0]) + parseInt(b)).toString();
  }
  if (a[0].length > 3) {
    var f = a[0].substr(0, a[0].length - 3);
    var g = a[0].substr(a[0].length - 3, a[0].length);
    a[0] = f + "." + g;
  }
  a = d + a.toString() + e;
  return a;
}

snippet.log(CompareAmounts("1.234,55", 12));
snippet.log(CompareAmounts("-10", 5));
snippet.log(CompareAmounts("50.400,80", 100));
snippet.log(CompareAmounts("1.000.000,00", 1));  // incorrect result
snippet.log(CompareAmounts("-50,80", 100));      // incorrect result
<!-- Provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>