2017-04-25 166 views
0

据我所知,JavaScript使用IEEE 754浮点数来处理实数。 问题使用时发生,这是相当常见的问题:MongoDB浮点值精度?

0.1 + 0.2 = 0.30000000000000004

大多数的时间,使用像“big.js”的模块,但使用时问题MongoDB的。

看看这个文件:

{ “_id”:物件( “58ff8f721bbfbcd140e472b3”), “值”:0.1}

当我运行$ INC。是这样的:

db.dec.update({_id:ObjectId('58ff8f721bbfbcd140e472b3')},{$ inc:{value:0.2}});

结果都不好:

{ “_id”:物件( “58ff8f721bbfbcd140e472b3”), “值”:0.30000000000000004}

我知道为什么它的发生,但有没有办法避免这个问题?

+1

这是为什么这是你的问题? – Thomas

+0

@Thomas因为我正在处理货币 – modernator

+0

对我来说这听起来像格式化问题,而不是数字系统的问题。选中这个:'var nr = .1 + .2; console.log(nr,nr.toLocaleString(“en”,{style:“currency”,currency:“USD”}))'[Number#toLocaleString()](https://developer.mozilla.org/en- US/docs/Web/JavaScript/Reference/Global_Objects/Number/toLocaleString) – Thomas

回答

1

如果你确切地知道你想要的小数位数,你可以做Number((.1+.2).toFixed(1))。或者,您可以使用orom作为像mongoose这样的mongodb,并为数据库文档定义模型,并使用模型中的某些代码定义所需的精度。

+0

谢谢。我现在就试试。 – modernator