几次后猫鼬增量值错误

时间:2013-02-26 21:54:19

标签: mongodb express mongoose

我在MongoDB中收集了一些产品。运行Express 3和Mongoose的应用程序。我正在拍卖,当我尝试将产品的价格增加0.01时,它可以正常工作直到第6次,然后转到“1000.0699999999999”而不是1000.07。知道为什么吗?再过几次点击后,它将是:1000.1699999999998等等。

这是我的更新功能:

app.post('/auctions/add', function(req, res){

  //Get username
  var user = req.session.username ;

  //Product ID from form
  var productID = req.body.product_id ;

  //Find and update product
  //Products.update( { id: productID }, { price: this.price + 0.01 } ).exec() ;
  Products.update( { id: productID }, {$inc: { price: .01 }, user_bidding: { username: user, timeBid: new Date() }}, function(err, numberAffected, raw) {

    console.log(err);
    console.log(numberAffected);
    console.log(raw);

  } ) ;

  //redirect to home
  res.redirect( '/' );

}) ;

2 个答案:

答案 0 :(得分:3)

这不是一个猫鼬问题..这就是javascript的工作方式......在javascript 0.1 + 0.2 !== 0.3中..这是因为浮点运算并不精确(或者至少不是你所期望的)..但是浮点运算中的整数运算是精确的..你可以将值转换为整数,得到总和,然后除以保留所有内容。

例如

(0.1 * 10 + 0.2 * 10)/10 === 0.3

所以在你的情况下像

var price = 1000; 
price = (price*100 + 0.01*100)/100 // => 1000.01;

修改

btw以美分为单位的建议确实更好......你应该考虑到这一点

答案 1 :(得分:0)

我认为price.toFixed(3)是更好的解决方案。没有美分,没有时期。