Definición
$round$roundredondea un número a un entero entero o a un lugar 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 número entero entre -20 y 100, exclusivo. por ejemplo,
-20 < place < 100. Por defecto es0si no se especifica.Si
<place>se resuelve como un entero positivo,$roundse redondea a<place>decimales.Por ejemplo,
$round : [1234.5678, 2]redondea a dos decimales y devuelve1234.57.Si
<place>se resuelve en un entero negativo,$roundredondeará usando el dígito<place>a la izquierda del decimal.Por ejemplo,
$round : [1234.5678, -2]utiliza el segundo dígito a la izquierda del punto decimal (3) y devuelve1200.Si el valor absoluto de
<place>es igual o superior al número de dígitos a la izquierda del decimal,$rounddevuelve0.Por ejemplo, el componente
$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 punto decimal y devuelve0.Si
<place>se resuelve en0,$roundrealiza redondeos usando el primer dígito a la derecha del punto decimal y devuelve el valor entero redondeado.Por ejemplo,
$round : [1234.5678, 0]devuelve1235.
Comportamiento
Redondeando a valores pares
Al redondear un valor de 5, $round redondea al valor par más cercano. Por ejemplo, considere los siguientes documentos de muestra:
{_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 que más se acerca al valor par 10, mientras que los valores 11.5 y 12.5 son los que más se acercan al valor par 12. Redondear al valor par más cercano respalda una distribución más uniforme de datos redondeados que hacerlo siempre hacia arriba o hacia abajo.
Precisión de redondeo con números de punto flotante
Si imprimes un número de punto flotante de doble precisión 0.05 con 20 dígitos después del separador decimal, verás 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 necesitas un número de punto flotante para una aplicación que requiere alta precisión, considera un valor Decimal128. Para obtener más información, consulte BSON.Decimal128.
Si necesitas almacenar un valor en moneda, considera un número entero utilizando la unidad monetaria de denominación más baja. Por ejemplo, utilice un número entero con céntimos o centavos en lugar de un número de punto flotante.
Tipo de datos devuelto
El tipo de datos devuelto coincide con el tipo de datos de la expresión o valor ingresados.
null; NaN, y +/- Infinity
Si el primer argumento se resuelve en un valor de
nullo hace referencia a un campo que falta,$rounddevuelvenull.Si el primer argumento se resuelve como
NaN,$rounddevuelveNaN.Si el primer argumento se resuelve a infinito negativo o positivo,
$roundretorna respectivamente infinito negativo o positivo.
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 usando 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 más cercano: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 }