You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何让MongoDB中$inc操作结果自动保留两位小数(四舍五入)

解决MongoDB $inc操作后浮点数精度问题

直接使用MongoDB的聚合管道更新语法,结合$round操作符将计算结果四舍五入到两位小数,替代单纯的$inc操作,既能保证原子性又能解决精度问题:

money = 4.92
from_snowflake = "19251"

await db["bank"].update_one(
    {"snowflake": str(from_snowflake)},
    [
        {"$set": {
            "balance": {"$round": [{"$subtract": ["$balance", float(money)]}, 2]}
        }}
    ]
)

说明

  • 采用聚合管道更新方式,通过$subtract计算当前余额与指定金额的差值,再用$round强制保留两位小数,最后用$set完成字段更新。
  • 该操作是原子性的,避免了先查询再更新可能引发的并发问题,直接在数据库层面处理精度,比Python端计算后再更新更可靠。

如果偏好保留$inc的逻辑,也可以分两步完成更新(先增减再修正精度),但效率略低于上述一步到位的方法:

await db["bank"].update_one(
    {"snowflake": str(from_snowflake)},
    [
        {"$inc": {"balance": -float(money)}},
        {"$set": {"balance": {"$round": ["$balance", 2]}}}
    ]
)

内容的提问来源于stack exchange,提问作者Krzychu1289

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.22 06:45:14