【问题标题】:MongoDB number precision when using $inc in node/mongoose在 node/mongoose 中使用 $inc 时的 MongoDB 数字精度
【发布时间】:2019-01-06 23:11:59
【问题描述】:

我目前正在使用 MongoDB 对数据库进行建模,在该数据库中,用户可以在账户之间转移资金并购买产品,其价值从他们当前的余额中扣除。对于产品价值和用户余额,我使用小数点后两位的精度。

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

{
    "balance": 31513.210000000003,
}

我正在使用 node 和 mongoose 来操作我的数据库,并且我知道该语言的浮点不准确性,但我想知道是否有任何方法可以在我的 mongodb 数据库中克服这个问题并强制它总是使用两位小数,所以当我查询余额为正的用户时,不会检测到像 0.00000000003 这样的值,因为它应该是 0。

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

【问题讨论】:

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


    【解决方案1】:

    除了使用使用浮点数学的 double 之外,您还有其他几种方法可供您选择,它们提供不同的优缺点。

    整数

    不是以整数单位表示余额,而是以分数单位表示余额。所以你将 123.45 存储为 12345。如果数学是加法和减法,那么这很容易,你需要确保的是,任何时候你代表一个值时插入 .在适当的地方,但您可以为此编写一个函数。

    对象

    将其表示为两个整数:一个表示整数部分,一个表示小数部分(123 和 45)。这使数学变得更难,但可能会使输出更易于管理,并且更难意外输出错误值。

    字符串

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

    【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-11-05
    • 1970-01-01
    • 2021-08-19
    • 1970-01-01
    • 2013-04-13
    • 1970-01-01
    • 1970-01-01
    • 2020-09-05
    相关资源
    最近更新 更多