我正在一个金融项目中尝试存储交易金额,价格最多可以存储两位小数,我试图为我的金额字段选择模式类型,我首先想到的是{{1} }使用Number
,另一种选择是以Number Decimal类型存储它们。
现在,由于我的价格最多只能达到2个小数位,因此我应该坚持使用默认的roundto:2
和Number
还是存在一些小数点后四舍五入的问题。
在roundto:2
和Number
中存储值的字节数也有区别吗?
谢谢
答案 0 :(得分:1)
当然,请使用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") }