Jquery / Javascript - 无法增加数字(tweet-id)

时间:2012-11-22 11:18:15

标签: javascript jquery twitter integer increment

我不明白。
我无法增加Tweet-ID ......

以下是演示:http://jsbin.com/idupoq/1/edit

glb = {};
glb.lastTweetId = 0;

getTweets();

function getTweets()
{
    console.info('# LAST ID');
    console.log(glb.lastTweetId);

    console.info('# TEST 1');
    glb.lastTweetId++;
    console.log(glb.lastTweetId);  

    console.info('# TEST 2');
    glb.lastTweetId = glb.lastTweetId+1;
    console.log(glb.lastTweetId);  

    console.info('# TEST 3, OK IS INT BUT PARSE AGAIN ');
    glb.lastTweetId = parseInt(glb.lastTweetId);
    glb.lastTweetId++;
    console.log(glb.lastTweetId);  

    $.getJSON('http://search.twitter.com/search.json?q=%23wwm&since_id='+glb.lastTweetId+'&include_entities=true&result_type=mixed&lang=de&callback=?', function(data, textStatus)
    {
        if(data.results.length > 0)
        {
            glb.lastTweetId = data.results[0]['id'];
        }
        glb.tm= setTimeout('getTweets();',5000);
    });
}

提前致谢!

3 个答案:

答案 0 :(得分:7)

这是因为收到的ID超出Number格式的范围,例如

271567725082578940 + 1 = 271567725082578940

您应该使用特殊库来处理大数字。一些例子:

答案 1 :(得分:1)

肮脏但短暂的 http://jsbin.com/idupoq/18/edit

    glb.lastTweetId = ''+data.results[0]['id']+'';
    var lastTwoDig = parseInt(glb.lastTweetId.substr(glb.lastTweetId.length-2));
    var startDigit = glb.lastTweetId.substring(0, glb.lastTweetId.length-2);
    lastTwoDig++;
    if(lastTwoDig==01){ lastTwoDig = '01'; }
    console.log(glb.lastTweetId);
    console.log(' '+startDigit+''+lastTwoDig+' ');      

答案 2 :(得分:1)

正如其他人已经说过的那样,是因为Number无法表达271567725082578941。如果你想对这个数字做的只是将它增加1,那么你应该只需要以下函数:

function stringInc(v){
    var digits = v.toString().split('');
    var i = digits.length-1;
    while (digits[i]==9 && i>0){      
      digits[i] = 0;
      i--;
    }
    digits[i] = 1+parseInt(digits[i]);
    return digits.join('');
}

如果您希望使用该号码执行更多操作,那么最好使用VisioN建议的BigNumber库。

无论哪种方式,您都应该注意到您无法从data.results[0]['id']读取推文ID,因为它被解释为数字并四舍五入为271567725082578940。您需要使用data.results[0]['id_str']

在此处查看更新的jsbin:http://jsbin.com/idupoq/19/。请注意,控制台正在记录服务器的结果:

...

"geo":null,
"id":     271580395022217200,
"id_str":"271580395022217216",
"iso_language_code":"de"

...

因此您观察到的值271567725082578940也不正确。