2013-07-08 17 views
7

Webサーバーから承認済みのツイートのリストをJSON形式で渡しています。私はURLに行くとき:354210796420608004:のIDを持っているJavascriptがJSONで大量に解析されていません

[{ 
    "date": "2013-07-08T12:10:09", 
    "text": "#RaspberryPi ist auf dem Weg :-)", 
    "author_pic_url": "http://a0.twimg.com/profile_images/1315863231/twitter_normal.jpg", 
    "id": 354210796420608004, 
    "author": "switol" 
}] 

http://localhost:8000/showtweets/?after_id=354210796420608003を私のブラウザで私は、次のJSONを取得します。私はJavascriptからGET呼び出しを行うとき

、番号が変更されます。

function TweetUpdater() { 
} 

TweetUpdater.latest_id = 0; 
TweetUpdater.undisplayed_tweets = new Array(); 

TweetUpdater.prototype.get_more_tweets = function() { 
    // var since_id = parseFloat(TweetUpdater.get_latestlatest_id; 
    // alert(since_id); 
    var get_tweets_url = "/showtweets/?after_id="+TweetUpdater.latest_id; 
    $.get(get_tweets_url, function (tweets) { 
     if (tweets.length > 0) { 

      ///////////////////////////////////////////////////////// 
      alert(tweets[0].id+", "+ tweets[0].text); <<<<< THIS LINE 
      ///////////////////////////////////////////////////////// 

      TweetUpdater.latest_id = tweets[0].id; 
      for (var i = 0; i < tweets.length; i++) { 
       TweetUpdater.undisplayed_tweets.push(tweets[i]); 
      } 
     } 
    }, "json"); 
}; 

このコード警告:!354210796420608000, #RaspberryPi ist auf dem Weg :-)

354210796420608004 = 354210796420608000

非常に奇妙な。

+3

JS "整数"は最大で2^53 = 9007199254740992です。あなたのサイズはもっと大きくなります。ここを見てhttp://stackoverflow.com/questions/4557509/javascript-summing-large-integers – Bakudan

答えて

11

いいえ、非常に奇妙ではありません。 JSはすべての数値を倍精度で表し、整数が増えるとある時点で精度が失われます。詳細については、What is JavaScript's highest integer value that a Number can go to without losing precision?を参照してください。

問題を解決するには、idを文字列にするだけです。とにかく計算をしないでください。しかし、オリジナルのJSONでそれを行う必要があります。それ以外の場合、精度の低下はすでにJSON.parseで発生します。

+0

イベントにはjavascript用の[bignum](https://github.com/jtobey/javascript-bignum)ライブラリもあります算術的に処理する必要があります。 – Mike

+0

私は、IDが文字列に変換されてからサーバーから返されることを確認しました。これは問題を解決します。ありがとう。 – tompreston

関連する問題