如何将数字截断为3位小数

时间:2017-10-31 14:58:47

标签: mongodb rounding

我不知道如何在MongoDB中舍入一个数字。我只发现如何使用2位小数,但没有更多的小数。

"location" : {
    "type" : "Point",
    "coordinates" : [ 
        -74.00568, 
        40.70511
    ]
}

这是一个坐标的例子,我需要在点之后用3个数字进行舍入。 谢谢

3 个答案:

答案 0 :(得分:4)

对于3位小数舍入,您可以使用此公式。

$divide: [ {$trunc: { $multiply: [ "$$coordinate" , 1000 ] } }, 1000 ]

例如,使用您的示例数据,并使用此聚合:

db.getCollection('Test2').aggregate([
    { $project : 
        { 
            "location.type" : "$location.type",
            "location.coordinates" :  
            { 
                $map: 
                {
                    input: "$location.coordinates",
                    as: "coordinate",
                    in: { $divide: [ {$trunc: { $multiply: [ "$$coordinate" , 1000 ] } }, 1000 ] }
              }
            }   
        } 
    }
])

您可以获得所需的结果。

{
    "_id" : ObjectId("59f9a4c814167b414f6eb553"),
    "location" : {
        "type" : "Point",
        "coordinates" : [ 
            -74.005, 
            40.705
        ]
    }
}

答案 1 :(得分:0)

Mongo 4.2 开始,有一个新的 $trunc聚合运算符,可用于截断 number < / em> 到指定的小数 place

  

{$ trunc:[]}

在聚合管道中可以这样使用(在这里,我们将x截断为3小数位):

// db.collection.insert([{x: 1.23456}, {x: -9.87654}, {x: 0.055543}, {x: 12.9999}])
db.collection.aggregate([{ $project: { "trunc_x": { $trunc: ["$x", 3] }}}])
// [{"trunc_x": 1.234}, {"trunc_x": -9.876}, {"trunc_x": 0.055}, {"trunc_x": 12.999}]

请注意,place参数是可选的,而省略它会导致截断为整数(即​​在小数点后0位截断)。

如果您对舍入而不是截断感兴趣,还请注意等效的$round运算符。

答案 2 :(得分:0)

有了坐标(如在数组中一样),您可以将其截断2个步骤:

  1. $ arrayElemAt
  2. $ trunc

动起来:

 {'$project':{ 
    'lat': {'$trunc': [{ '$arrayElemAt': [ "$location.coordinates", 0 ] },2]},
    'lon': {'$trunc': [{ '$arrayElemAt': [ "$location.coordinates", 1 ] },2]}, 
 },

我假设您在坐标中的第一个值是纬度。