【问题标题】:Javascript Floating Number ComparisonJavascript 浮点数比较
【发布时间】:2018-10-25 15:38:24
【问题描述】:

我正在尝试做我认为很简单但结果很奇怪的事情。我在一个页面上有两个字段:transactionAmounttransactionLimit。单击按钮时,它会调用一个 javascript 函数,以确保金额​​不大于限制:

var transactionAmount = parseFloat(document.getElementById("amount").value).toFixed(2);
var transactionLimit = parseFloat(document.getElementById("limit").value).toFixed(2);

if (transactionAmount > transactionLimit) {
  alert("Over limit");
}

如果我将 transactionAmount 设置为 2.00 美元,将交易限制设置为 100.00 美元,我会收到超限警报。如果我将 transactionAmount 设置为 1.00 美元,那么它可以正常工作。基本上,如果限额为 100.00 美元,则任何其他小于 1.00 美元的值都有效,但任何超过 1.00 美元的值都会给我错误。

不胜感激!谢谢!

【问题讨论】:

  • 你在比较 strings

标签: javascript floating-point comparison


【解决方案1】:

由于toFixed(2) 而发生的主要问题会将您的结果转换为string,这就是您的情况没有按预期工作的原因。只需用前面的 + 字符包装它,使其成为 String

中的 Number

var transactionAmount = +(parseFloat('2.00').toFixed(2));
var transactionLimit = +(parseFloat('100.00').toFixed(2));
console.log(transactionAmount,transactionLimit, typeof transactionAmount,typeof transactionLimit )
if (transactionAmount > transactionAmount ) {
  console.log("Over limit");
}

【讨论】:

    【解决方案2】:

    尝试将函数“Number()”添加到您的值中,toFixed() 实际上将它们转换为字符串。您也可以在前面添加一个“+”来执行相同的操作。

    例子:

        var transactionAmount = Number(parseFloat("150.00").toFixed(2)); //or: +parseFloat("150.00").toFixed(2)
        var transactionLimit = Number(parseFloat("100.0").toFixed(2)); //or: +parseFloat("100.0").toFixed(2)
    
        if (transactionAmount > transactionLimit)
        {
           alert("Over limit");
        } else {
            alert("you ok dude");
        }
    

    输出:

    "Over limit"
    

    希望对你有帮助!

    【讨论】:

    • 谢谢 - 我很感激!!
    猜你喜欢
    • 2012-08-28
    • 1970-01-01
    • 1970-01-01
    • 2016-02-08
    • 2021-07-10
    • 1970-01-01
    • 2021-05-28
    • 2012-05-13
    • 2011-08-24
    相关资源
    最近更新 更多