MongoDB - 十进制类型的值怎么样?

我目前正在学习 MongoDB 并将其应用于一个小型金融相关项目。


当我阅读 MongoDB in Action ,它说:

The only other issue that commonly arises with BSON numeric types is the lack of decimal support. This means that if you’re planning on storing currency values in MongoDB, you need to use an integer type and keep the values in cents.


我的金融相关产品会涉及一些货币值(value),但我对上述说法有点困惑或担心。以下是我的问题:

  1. 我可以在我的项目中对那些 货币值 使用 double 吗?
  2. 如果我直接对他们使用 double 会发生什么或后果?
  3. 如果十进制类型是金融产品的必备品,那么使用 MongoDB 是不是一个坏主意?
  4. 你需要使用整数类型并保持以美分为单位的值是什么意思?这是否意味着如果我要存储 1.34 美元,那么我应该存储 134 美分

最佳答案

如果您出于财务目的需要精确表示,则不适合使用 double 值或浮点值,因为小数部分会出现舍入误差。某些十进制值不能使用基于二进制的 float 表示,必须近似。

有关技术含量较低的介绍,请参阅 The trouble with rounding floating point numbers ;如果您想了解一下,请阅读 What Every Computer Scientist Should Know About Floating-Point Arithmetic .

建议使用整数类型(以美分存储值)是为了避免潜在的舍入错误。此方法在 Using a Scale Factor 的 MongoDB 文档中被描述为“modelling monetary data”。并且是 MongoDB 3.2 及更早版本的通用解决方法。

MongoDB 3.4 包含一个新的 Decimal BSON type它为操作货币数据字段提供了精确的精度。

https://stackoverflow.com/questions/11541939/

相关文章:

mongodb - 如何在 MongoDB Compass 工具中执行更新($set)查询?

mongodb - 了解MongoDB缓存系统

javascript - 如何在 Mongoose 中将 _id 设置为 db 文档?

node.js - 一个包含 node.js 和 mongodb 的整个网站?

mongodb - 使用 mongimport 导入 JSON 文件,不断得到 `unexpecte

mongodb - 如何为 MongoDB 中的嵌入式文档创建唯一 ID?

mongodb - 使用 Mongoose、Node.js 和 Underscore 生成代码的简单

c# - 如何将任意 json 对象发布到 webapi

ruby-on-rails - Mongoid/Mongodb 和查询嵌入文档

mongodb - 如何使用 mongoose 将文档插入 mongodb 并获取生成的 id?