Definición
$round$roundredondea un número a un entero o a un decimal especificado.$roundtiene la siguiente sintaxis:{ $round : [ <number>, <place> ] } CampoTipoDescripción<number>Número
<place>entero
Opcional Puede ser cualquier expresión válida que se resuelva en un entero entre -20 y,100
-20 < place < 100excluyendo, por0ejemplo,. El valor predeterminado es si no se especifica.Si
<place>se resuelve en un entero positivo, se redondea$rounda<place>decimales.Por ejemplo,
$round : [1234.5678, 2]se redondea a dos decimales y devuelve1234.57.Si se
<place>resuelve en un entero negativo, se redondea utilizando el$rounddígito<place>a la izquierda del decimal.Por ejemplo,
$round : [1234.5678, -2]utiliza el 2º dígito a la izquierda del decimal (3) y devuelve1200.Si el valor absoluto de es
<place>igual o mayor que el número de dígitos a la izquierda del decimal,$round0devuelve.Por ejemplo,
$round : [ 1234.5678, -4]especifica el cuarto dígito a la izquierda del decimal. Esto equivale al número de dígitos a la izquierda del decimal y devuelve0.Si se
<place>resuelve0en, redondea utilizando el primer dígito a la derecha del decimal y devuelve un valor entero$roundredondeado.Por ejemplo,
$round : [1234.5678, 0]devuelve1235.
Comportamiento
Redondeo a valores pares
Al redondear un valor de,5 se$round redondea al valor par más cercano. Por ejemplo, considere los siguientes documentos de ejemplo:
{_id : 1, "value" : 10.5}, {_id : 2, "value" : 11.5}, {_id : 3, "value" : 12.5}, {_id : 4, "value" : 13.5}
$round : [ "$value", 0] devuelve lo siguiente:
{_id : 1, "value" : 10}, {_id : 2, "value" : 12}, {_id : 3, "value" : 12}, {_id : 4, "value" : 14}
El valor 10.5 es el más cercano al valor par 10, mientras que los valores 11.5 y 12.5 son los más cercanos al valor par 12. Redondear al valor par más cercano facilita una distribución más uniforme de los datos redondeados que redondear siempre hacia arriba o hacia abajo.
Tipo de datos devueltos
El tipo de datos devuelto coincide con el tipo de datos de la expresión o valor de entrada.
null, NaN y +/- Infinity
Si el primer argumento se resuelve en un valor de
nullo hace referencia a un campo que falta,$roundnulldevuelve.Si el primer argumento se resuelve
NaNen,$roundNaNdevuelve.Si el primer argumento se resuelve en infinito negativo o positivo, devuelve infinito negativo o positivo
$roundrespectivamente.
Ejemplo | Resultados |
|---|---|
|
|
|
|
|
|
|
|
Ejemplo
Cree una colección llamada samples con los siguientes documentos:
db.samples.insertMany( [ { _id: 1, value: 19.25 }, { _id: 2, value: 28.73 }, { _id: 3, value: 34.32 }, { _id: 4, value: -45.39 } ] )
La siguiente agregación devuelve
valueredondeado al primer decimal:db.samples.aggregate([ { $project: { roundedValue: { $round: [ "$value", 1 ] } } } ]) La operación devuelve los siguientes resultados:
{ "_id" : 1, "roundedValue" : 19.2 } { "_id" : 2, "roundedValue" : 28.7 } { "_id" : 3, "roundedValue" : 34.3 } { "_id" : 4, "roundedValue" : -45.4 } La siguiente agregación devuelve
valueredondeado utilizando el primer dígito a la izquierda del decimal:db.samples.aggregate([ { $project: { roundedValue: { $round: [ "$value", -1 ] } } } ]) La operación devuelve los siguientes resultados:
{ "_id" : 1, "roundedValue" : 10 } { "_id" : 2, "roundedValue" : 20 } { "_id" : 3, "roundedValue" : 30 } { "_id" : 4, "roundedValue" : -50 } La siguiente agregación devuelve
valueredondeado al entero completo:db.samples.aggregate([ { $project: { roundedValue: { $round: [ "$value", 0 ] } } } ]) La operación devuelve los siguientes resultados:
{ "_id" : 1, "roundedValue" : 19 } { "_id" : 2, "roundedValue" : 29 } { "_id" : 3, "roundedValue" : 34 } { "_id" : 4, "roundedValue" : -45 }