在节点/猫鼬中使用$ inc时的MongoDB数字精度

时间:2018-07-30 16:26:12

标签: javascript node.js mongodb mongoose floating-point

我目前正在使用MongoDB建立数据库,在该数据库中,用户可以在帐户之间转移资金并购买产品,这些产品的价值从其当前余额中扣除。对于产品值和用户余额,我的精度为两位小数。

问题是,当我使用$ inc运算符对带有小数位的值进行加或减时,在用户文档中我会遇到一些精度错误,如下所示:

{
    "balance": 31513.210000000003,
}

我正在使用节点和猫鼬来操纵我的数据库,并且我知道该语言的浮点数不准确,但是我想知道是否有任何方法可以在我的mongodb数据库中克服此问题并将其强制执行始终使用两位小数,因此当我查询余额为正的用户时,不会检测到0.00000000003之类的值,因为它应该为0。

在mongodb中有什么方法可以控制它吗?

1 个答案:

答案 0 :(得分:0)

除了使用浮点运算的double之外,您还可以从其他方法中选择其他几种,分别提供各自的优缺点。

整数

不是以整个单位而是以分数单位表示余额。因此,您将123.45存储为12345。如果数学是加法和减法,那么这很容易,并且需要确保的是,只要您表示一个值,就插入。在适当的位置,但是您可以为此编写一个函数。

对象

用两个整数表示:一个代表整个整数,一个代表小数部分(123和45)。这使数学运算更加困难,但可能使输出更易于管理,并且更难以意外输出错误的值。

字符串

使用字符串,您将必须编写自己的所有数学运算,但是输出可以很简单,因为存储的值为'123.45'。