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.
Redondeo de precisión con números de punto flotante
Si imprime un número de punto flotante de doble precisión 0.05 con 20 dígitos después del separador decimal, verá 0.05000000000000000278, que es ligeramente mayor que 0.05 y se redondea a 0.1.
MongoDB utiliza el estándar IEEE 754 para operaciones de coma flotante, y el comportamiento es coherente con dicho estándar.
Si necesita un número de punto flotante para una aplicación que requiere alta precisión, considere un Decimal128 valor. Para más detalles, consulte BSON.Decimal.128
Si necesita almacenar un valor monetario, considere usar un entero con la unidad de denominación más baja. Por ejemplo, use un entero con centavos o peniques en lugar de un número de punto flotante.
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 }