意外的javascript响应

时间:2015-03-05 05:50:38

标签: javascript

首先是我的代码,

$(function() {
    var fee_percent = parseFloat('<?php echo $gateway["gateway_fees"]; ?>');
    var fee_fixed = parseFloat('<?php echo $gateway["gateway_fixed_fees"]; ?>');
    var min = parseFloat('<?php echo $gateway["min_invest_limit"]; ?>');
    var max = parseFloat('<?php echo $gateway["max_invest_limit"]; ?>');


    $("#amountId").on('change keyup keydown', function() {
        var $this = $(this);
        var val = parseFloat($this.val());
        val = val.toFixed(5);

        var valid = true;

        var fee = parseFloat(val * fee_percent / 100) + fee_fixed;
        fee = fee.toFixed(5);

        var final_amount = val - fee;
        final_amount = final_amount.toFixed(5);

        console.log("value: " + val);
        console.log("fee: " + fee);
        console.log("final: " + final_amount);
        console.log("min: " + min.toFixed(5));
        console.log("max: " + max.toFixed(5));

        if(val <= 0 || isNaN(val) || fee > val || val < min.toFixed(5) || val > max.toFixed(5)) fee = final_amount = 0;

        $("#depositFee").html(fee);
        $("#depositAmountFinal").html(final_amount);
    });
});

现在我的问题是, val > max.toFixed(5)这总是返回TRUE。

以下是控制台响应:

值:11.00000 费用:0.46000 决赛:10.54000 min:10.00000 最大值:10000.00000

所以值是11,最大值是10000,那为什么它是假的?

如果不清楚,请询问,谢谢。

更新:当我输入10,100或1000等时,它可以正常工作。

如果我不使用max.toFixed(5)但是我只使用max,那么一切正常,但是当我最后输入5的值时,如55,65,75等等,条件再次成为现实,应该返回假。

2 个答案:

答案 0 :(得分:2)

toFixed返回String。

所以"11" > "10000"会返回true因为。{ 1后跟1大于1后跟0

您可以在控制台中尝试:

"01" > "0001"会返回true,这也是基于相同的概念。

要避免它:

parseFloat(val) > parseFloat(max.toFixed(5))

答案 1 :(得分:0)

如果我理解你是对的:

val = 11;

max = 10000;

if(val > max)

if(11 **is greater than** 10000)

它应该返回false。 11不高于10,000。