定义
$trunc$trunc将数字截断为整数或指定的小数位。
语法
$trunc操作符的语法如下:
{ $trunc : [ <number>, <place> ] }
字段 | 类型 | 说明 |
|---|---|---|
| 数字 | |
| 整型 | 可选可以是解析为20和100之间(不含)整数的任何有效表达式。 例如,
|
行为
$trunc不对截断后的数据进行四舍五入。 要将输入值四舍五入到指定位,请使用$round表达式。
返回的数据类型
返回的数据类型与输入表达式或值的数据类型相匹配。
浮点数的截断精度
如果在小数点分隔符后打印一个具有 20 位的双精度点4.56,您将看到 4.55999999999999960920,它略小于 4.56,并被截断为 4.55。
MongoDB使用 IEEE 754 标准进行点计算,其行为与该标准一致。
如果精度要求较高的应用程序需要点,请考虑使用Decimal128 值。有关详细信息,请参阅BSON.Decimal128 。
如果需要存储货币值,请考虑使用最低货币面值单位的整数。示例,使用带分或便士的整数而不是点。
null、NaN 和+/- Infinity
如果参数解析为
null值或引用了缺失的字段,$trunc返回null。如果参数解析为
NaN,则$trunc返回NaN。如果参数解析为负无穷大或正无穷大,
$trunc则分别返回负无穷大或正无穷大。
例子 | 结果 |
|---|---|
|
|
|
|
|
|
|
|
例子
使用以下文档创建名为 samples 的集合:
db.samples.insertMany( [ { _id: 1, value: 19.25 }, { _id: 2, value: 28.73 }, { _id: 3, value: 34.32 }, { _id: 4, value: -45.34 } ] )
以下聚合操作返回四舍五入到小数点后第一位的
value:db.samples.aggregate([ { $project: { truncatedValue: { $trunc: [ "$value", 1 ] } } } ]) 操作返回以下结果:
{ "_id" : 1, "truncatedValue" : 19.2 } { "_id" : 2, "truncatedValue" : 28.7 } { "_id" : 3, "truncatedValue" : 34.3 } { "_id" : 4, "truncatedValue" : -45.3 } 以下聚合返回截断到第一位的
value:db.samples.aggregate([ { $project: { truncatedValue: { $trunc: [ "$value", -1 ] } } } ]) 操作返回以下结果:
{ "_id" : 1, "truncatedValue" : 10 } { "_id" : 2, "truncatedValue" : 20 } { "_id" : 3, "truncatedValue" : 30 } { "_id" : 4, "truncatedValue" : -40 } 以下聚合返回截断为整数的 ''value'':
db.samples.aggregate([ { $project: { truncatedValue: { $trunc: [ "$value", 0 ] } } } ]) 操作返回以下结果:
{ "_id" : 1, "truncatedValue" : 19 } { "_id" : 2, "truncatedValue" : 28 } { "_id" : 3, "truncatedValue" : 34 } { "_id" : 4, "truncatedValue" : -45 }