我正在做一个金融项目,我试图为我的交易存储金额,价格最多可以存储两个小数点,我正在尝试为我的金额字段选择Schema类型,我首先想到的是Number
和roundto:2
,另一个选项是将它们存储为Number decimal类型。
现在,由于我的价格最多只能达到2位小数,所以我应该坚持使用默认的Number
和roundto:2
,或者可能存在小数可以四舍五入的问题。
此外,在Number
和Number Decimal
中存储值的字节数之间是否存在差异?
感谢
当然要使用NumberDecimal。永远不要用正则浮点数来表示金钱(它们不能准确地表示大多数值(。
演示:
db.numbers.insert({fp: 0.1, dec: NumberDecimal('0.1')})
db.numbers.insert({fp: 0.2, dec: NumberDecimal('0.2')})
db.numbers.aggregate([
{
$group: {
_id: 1,
total_fp: { $sum: "$fp"},
total_dec: { $sum: "$dec"}
}
}
])
// { "_id" : 1, "total_fp" : 0.30000000000000004, "total_dec" : NumberDecimal("0.3") }