Jac*_*ale 31 decimal bigdecimal mongodb bson
我目前正在学习并将MongoDB应用于一个小型金融相关项目.
当我阅读MongoDB in Action时,它说:
BSON数字类型通常出现的唯一其他问题是缺少小数支持.这意味着如果您计划在MongoDB中存储货币值,则需要使用整数类型并将值保持为美分.
我的财务相关产品将涉及一些货币价值,但我有点困惑或担心上述声明.这是我的问题:
double用于currency values我项目中的那些人吗?double它们会发生什么或后果?you need to use an integer type and keep the values in cents?这是否意味着如果我要去商店1.34 dollars,那么我应该存储134 cents?谢谢
Ste*_*nie 33
如果您想要出于财务目的的精确表示,则双精度或浮点值不适合,因为小数部分会受到舍入误差的影响.某些十进制值不能使用基于二进制的浮点表示,必须近似.
对于技术含量较低的介绍,请参阅舍入浮点数的问题 ; 如果你想要了解,那么阅读每个计算机科学家应该知道的关于浮点运算的内容.
使用整数类型(以美分存储值)的建议是为了避免潜在的舍入错误.这种方法在MongoDB文档中被描述为" 使用比例因子 "来建模货币数据,并且是MongoDB 3.2及更早版本的一般解决方法.
MongoDB 3.4包含一个新的Decimal BSON类型,它为操作货币数据字段提供了精确的精确度.
MongoDb在 3.4 版本中增加了对Decimal 数据类型的支持。它也可以从shell 获得。
3.4 使用新的十进制数据类型添加了对 decimal128 格式的支持。decimal128 格式支持最多 34 位十进制数字(即有效数字)和指数范围为 ?6143 到 +6144 的数字。
与仅存储十进制值的近似值的双精度数据类型不同,十进制数据类型存储精确值。例如,十进制 NumberDecimal("9.99") 的精确值为 9.99,而双精度 9.99 的近似值为 9.9900000000000002131628...
| 归档时间: |
|
| 查看次数: |
36750 次 |
| 最近记录: |