2

我在 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( '/' );

}) ;
4

2 回答 2

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;

编辑:

顺便说一句,以美分工作的建议真的更好..你应该考虑到这一点

于 2013-02-26T22:17:41.110 回答
0

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

于 2015-11-11T01:28:15.547 回答