Javascript数字比较不正确

Javascript数字比较不正确,javascript,Javascript,我正在用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 = GetRateI

我正在用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");
    }
}
失败的测试之一是我通过了500英镑的贷款和1英镑的期限

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

620.00和1000.00

给定这些值,我希望下面的测试失败,但它不会

如果(应偿还总额>总成本上限) 如果(620.00>1000.00)

控制台日志读取“capped”以证明已输入if语句

我无论如何都不是javascript专家,但我看不出这是如何失败的

以下是自定义的圆形函数:

function round(value, decimals) {
    return Number(Math.round(value + 'e' + decimals) + 'e-' + decimals).toFixed(decimals);
}

非常感谢您的建议。

您没有显示
round
函数,但我假设它使用的是
.toFixed()
。问题是你实际上没有任意精度的浮点数,所以它会转换成字符串,然后

console.log("620.00" > "1000.00"); // true
给我通风报信的是,如果你在控制台上记录一个像
620.00
这样的数字,它会自动将其截断,你看到尾随的零这一事实表明它是一个字符串

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

您的
轮函数是什么?对不起,我没有意识到这是一个自定义函数-让我看看。轮函数似乎返回字符串?您编写它就像函数调用一样,这可能会混淆JS新手(如OP)。帕伦夫妇完全没有必要。它在编写过程中始终有效的唯一原因是paren的运算符优先级高于
typeof
(否则会出现引用错误)。您所写的内容是这样计算的
typeof(totalreturnable)
和任何其他单个表达式一样
totalreturnable
将对自身进行计算。好的。删除以避免混淆:)我找到并添加了round函数-您认为它使用.toFixed()@JohnOhara-yup是正确的。只需将结果转换回数字即可进行比较
(+totalreturnable>+totalCostCap)
。不知道为什么Brendan Eich认为使用unicode点值对字符串进行更大的比较是个好主意,但是呢。@JaredSmith-WOAH!您是否有任何文档说明其工作原理?我从未见过这种技巧before@TheCrzyMan你是说一元加号运算符?谢谢你的帮助,杰瑞德。我已经删除了totalCostCap上的四舍五入,并在最终确定数字时,在if语句之后移动了其他两个回合,不需要进行严格化,然后再进行回放。