该算法会累积截断误差吗?

Will this algorithm accumulate truncation error?

我计划编写允许网页评级系统的第 3 方脚本,但我只希望它嵌入的每个网页在数据库中占据一行(或更准确地说是一个文档,因为我采取 NoSQL 路线)。我的评级伪代码如下所示:

function update(page, rate) {
  collection.get({
    page: page
  }, function callback(err, doc) {
    if (!err) {
      var rating = doc.rating,
        votes = doc.votes;

      collection.update({
        page: page
      }, {
        votes: votes + 1,
        rating: (rating * votes + rate) / (votes + 1) // here's the iffy part
      });
    }
  });
}

有没有办法改进算法以避免浮点值的截断错误,或者这从一开始就不是问题吗?

Is there a way to improve the algorithm in order to avoid truncation error for floating point values, or will this not be a problem in the first place?

是的。将所有评分的总和和评分的数量作为整数存储在数据库中,并且只在显示时计算这些的平均值。