我正在以JSON格式传回来自网络服务器的批准推文列表。当我转到URL:时,http://localhost:8000/showtweets/?after_id=354210796420608003在我的浏览器中得到以下JSON:
http://localhost:8000/showtweets/?after_id=354210796420608003
[{ "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" }]
其ID为:354210796420608004。
354210796420608004
当我从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 :-)
354210796420608000, #RaspberryPi ist auf dem Weg :-)
354210796420608004!= 354210796420608000
很奇怪。
不,不是很奇怪。JS将所有数字表示为双精度数字,并且随着整数的增大,您有时会失去精度。
要解决该问题,只需将id其设为字符串- 无论如何您都不会使用该字符串进行计算。不过,您必须在原始JSON中执行此操作,否则精度损失JSON.parse已经发生。
id
JSON.parse