JavaScript编号比较不正确

时间:2018-12-13 13:31:03

标签: javascript

我正在用javascript做一些数学运算,但是我一直都没有得到预期的结果。

这是我的功能-某些部分已简化。

function onEdit(event) {
  var ss = SpreadsheetApp.getActiveSpreadsheet();
  var s = event.source.getActiveSheet();
  var r = event.source.getActiveRange();

  if(s.getName() == "MAIN" && r.getColumn() == 5 && r.getValue() == "CORE"  || r.getValue() == "WARRANTY" || r.includes("DAMAGE")) {
    var row = r.getRow();
    var numColumns = s.getLastColumn();
    var targetSheet = ss.getSheetByName("ELITE");
    var target = targetSheet.getRange(targetSheet.getLastRow() + 1, 1);
    s.getRange(row, 1, 1, numColumns).copyTo(target);
    }
}

一项失败的测试是当我通过一笔500的贷款和1的期限时通过的。

如您所见,我将3个值记录到控制台。输出的前两个值是:

620.00和1000.00

给出这些值,我希望以下测试失败,但是不会失败。

如果(总应付款> totalCostCap) 如果(620.00> 1000.00)

控制台日志显示为“ capped”,以证明已输入if语句。

无论如何我不是一名JavaScript专家,但我看不出这是怎么回事。

这是自定义圆形函数:

function updateExample($widget) {
    var loan = parseInt($widget.attr("data-loan"), 10);
    var term = parseInt($widget.attr("data-term"), 10);

    // Get the best rate
    var rateInfo = GetRateInfo(loan, term);
    var annualRate = rateInfo[2];

    // Calculate costs
    var rate = (term === 1
        ? annualRate / 365 * 30
        : annualRate / 12) / 100;

    var pow = Math.pow(rate + 1, term);
    var payment = round(rate * pow / (pow - 1) * loan, 2);
    var totalRepayable = round(payment * term, 2);
    var totalCostCap = round(loan * 2, 2);
    var costCapped = false;
    console.log(totalRepayable);
    console.log(totalCostCap);

    if (totalRepayable > totalCostCap) {
        console.log("capped");
    }
}

任何建议表示赞赏。

1 个答案:

答案 0 :(得分:2)

您没有显示round函数,但我假设它正在使用.toFixed()。问题是您实际上并没有拥有个任意精度的浮点数,因此它会转换为字符串,并且

console.log("620.00" > "1000.00"); // true

告诉我的事情是,如果您在控制台中输入620.00之类的数字,则会自动将其截断,这是因为您看到尾随零的事实表明它是一个字符串。

更新

是的,现在您发布了它肯定是在返回一个字符串。返回值的最后一部分是对.toFixed()的调用。只需将结果转换回数字即可进行比较。