比较两个数字时出现javascript错误

时间:2017-10-25 11:15:57

标签: javascript

当我调用此函数时会发生奇怪的错误。

所以我在代码中添加了两个句子来找出问题所在。 第一个是6行alert(result); 第二个是12行alert(wordbook_info_percentage+">="+result); 然后我执行我的代码,我发现结果变量是“100.0”和 "wordbook_info_percentage>=result" condition in "info_change_frame"wordbook_info_percentage is 2.0 and result is 100.0函数变为true 我无法理解为什么2.0>=100.0是真的。我的错是什么? 请帮帮我。

function word_book_info_change_1(){
    var wordbook_info_percentage=parseFloat(($('#wordbook_info_1').text()).replace('%','')).toFixed();
    arr[0]=43;

    var result=parseFloat((parseInt(arr[0])+parseInt(word_number))*100/parseInt(arr[1])).toFixed(1);    
    alert(result);

    var info_change_1_repeat=setInterval(info_change_frame,10);

    function info_change_frame(){
        if(wordbook_info_percentage>=result){
            alert(wordbook_info_percentage+">="+result);
            ClearInterval(info_change_1_repeat);
        }
        else{
            wordbook_info_percentage=(parseFloat(wordbook_info_percentage)+0.1).toFixed(1);
            $('#wordbook_info_1').text(wordbook_info_percentage+"%");
        }
    }
}

2 个答案:

答案 0 :(得分:3)

"2.0">="100.0"
true
2.0>100.0
false
parseInt("2.0")>parseInt("100.0")
false

我认为你应该将值解析为int。

function word_book_info_change_1(){
    var wordbook_info_percentage=parseFloat(($('#wordbook_info_1').text()).replace('%','')).toFixed();
    arr[0]=43;

    var result=parseFloat((parseInt(arr[0])+parseInt(word_number))*100/parseInt(arr[1])).toFixed(1);    
    alert(result);

    var info_change_1_repeat=setInterval(info_change_frame,10);

    function info_change_frame(){
        if(parseInt(wordbook_info_percentage)>=paseInt(result)){
            alert(wordbook_info_percentage+">="+result);
            ClearInterval(info_change_1_repeat);
        }
        else{
            wordbook_info_percentage=(parseFloat(wordbook_info_percentage)+0.1).toFixed(1);
            $('#wordbook_info_1').text(wordbook_info_percentage+"%");
        }
    }
}

答案 1 :(得分:0)

您正在将这些数字转换为number.toFixed(1)字符串。将字符串与数字进行比较使用基数排序,这就是您对比较感到困惑的原因。

只需将toFixed调用移动到您将值设置为某个DOM的末尾即可。



var a = 12.345;
var b = 5.35;

console.log(a, b);
console.log(a.toFixed(1), b.toFixed(1));
console.log(a > b);
console.log(a.toFixed(1) > b.toFixed(1));