JavaScript浮点数比较

时间:2018-10-25 15:38:24

标签: javascript floating-point comparison

我正在尝试做我认为直截了当但有奇怪结果的事情。我在页面上有两个字段: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,则可以正常工作。基本上,任何其他小于$ 1.00的值(如果限额为$ 100.00)都可以使用,但超过$ 1.00的任何值都会给我错误。

不胜感激!谢谢!

2 个答案:

答案 0 :(得分: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");
}

答案 1 :(得分:1)

尝试将函数“ 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"

希望对您有帮助!