我正在用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");
}
}
任何建议表示赞赏。
答案 0 :(得分:2)
您没有显示round
函数,但我假设它正在使用.toFixed()
。问题是您实际上并没有拥有个任意精度的浮点数,因此它会转换为字符串,并且
console.log("620.00" > "1000.00"); // true
告诉我的事情是,如果您在控制台中输入620.00
之类的数字,则会自动将其截断,这是因为您看到尾随零的事实表明它是一个字符串。
是的,现在您发布了它肯定是在返回一个字符串。返回值的最后一部分是对.toFixed()
的调用。只需将结果转换回数字即可进行比较。