$trunc(截断)
最后更新:2026-10-09
$trunc(截断)
$trunc截断数值的小数部分,向零的方向取整,可指定保留位数。接受两个参数:数值与可选的位置参数,位置规则与$round相同。常用于金额舍去零头、分页、展示前处理等场景。与$round不同,$trunc不做四舍五入:2.9得2,-2.9得-2。对正数而言$trunc与$floor结果相同,对负数则不同:-1.2的$trunc是-1,$floor是-2。
| 分类 | 数学 |
|---|---|
| MongoDB 版本 | 1.0+ |
| 示例语言 | mongosh (Shell) |
📝 语法
{ $trunc: [ <数值>, <位置> ] }
⚙️ 参数
| 数值 | 数值或解析为数值的表达式。 |
|---|---|
| 位置 | 可选,保留的小数位;0或不传表示取整,负数取整到十位及以上。 |
返回值:截断后的数值;null或缺失时返回null
▶ 示例
请在本地安装的 mongosh 中执行以下命令(需已启动 mongod):
// $trunc:金额舍去小数零头
db.orders.aggregate([
{ $project: {
whole: { $trunc: '$price' }
} }
])
运行结果:
{ '_id': 1, 'whole': 19 }
{ '_id': 2, 'whole': 12 }
📌 注意事项
- 始终向零截断,不做四舍五入
- 负数时与$floor不同:-1.2的$trunc是-1
- 位置参数支持负数,取整到十位百位
🏷️ 相关标签
💡 相关案例
更多实战案例即将上线,敬请期待。
📚 相关教程
❓ 常见问题
Q$trunc和$floor对负数有什么区别?
A$trunc向零截断(-1.2得-1),$floor向负无穷(-1.2得-2)。
Q$trunc和$round有什么区别?
A$trunc直接砍掉小数,$round按.5边界四舍五入。
Q$trunc能保留小数位吗?
A能,第二参数指定小数位,如$trunc: [19.999, 2]得19.99。