Definição
$round$roundrounds a number to a whole integer or to a specified decimal place.$roundtem a seguinte sintaxe:{ $round : [ <number>, <place> ] } CampoTipoDescrição<number>número
<place>inteiro
Opcional Pode ser qualquer expressão válida que resulte em um número inteiro entre -20 e 100, exclusivamente. por exemplo:
-20 < place < 100. O padrão é0se não for especificado.If
<place>resolves to a positive integer,$roundrounds to<place>decimal places.Por exemplo,
$round : [1234.5678, 2]arredonda para duas casas decimais e retorna um1234.57.If
<place>resolves to a negative integer,$roundrounds using the digit<place>to the left of the decimal.Por exemplo,
$round : [1234.5678, -2]usa o segundo dígito à esquerda do decimal (3) e retorna1200.If the absolute value of
<place>equals or exceeds the number of digits to the left of the decimal,$roundreturns0.Por exemplo,
$round : [ 1234.5678, -4]especifica o quarto dígito à esquerda do decimal. Isso equivale ao número de dígitos restantes do decimal e retorna0.If
<place>resolves to0,$roundrounds using the first digit to the right of the decimal and returns rounded integer value.Por exemplo,
$round : [1234.5678, 0]gera1235.
Comportamento
Arredondando para valores pares
When rounding on a value of 5, $round rounds to the nearest even value. For example, consider the following sample documents:
{_id : 1, "value" : 10.5}, {_id : 2, "value" : 11.5}, {_id : 3, "value" : 12.5}, {_id : 4, "value" : 13.5}
$round : [ "$value", 0] retorna o seguinte:
{_id : 1, "value" : 10}, {_id : 2, "value" : 12}, {_id : 3, "value" : 12}, {_id : 4, "value" : 14}
O valor 10.5 é mais próximo do valor par 10, enquanto os valores 11.5 e 12.5 são mais próximos do valor par 12. O arredondamento para o valor par mais próximo suporta uma distribuição mais uniforme dos dados arredondados do que sempre o arredondamento para cima ou para baixo.
Precisão de arredondamento com números de ponto flutuante
Se você imprimir um número de ponto flutuante de precisão dupla 0.05 com 20 dígitos após o separador decimal, verá 0.05000000000000000278, que é um pouco maior que 0.05 e arredondado para 0.1.
O MongoDB usa o padrão IEEE 754 para cálculos de ponto flutuante, e o comportamento é consistente com esse padrão.
If you need a floating point number for an application that requires high precison, consider a Decimal128 value. For details, see BSON.Decimal128.
Se você precisar armazenar um valor monetário, considere um número inteiro usando a unidade de denominação monetária mais baixa. Por exemplo, use um número inteiro com centavos em vez de um número de ponto flutuante.
Tipo de dados retornados
O tipo de dados retornado corresponde ao tipo de dados da expressão ou valor de entrada.
null, NaN e +/- Infinity
If the first argument resolves to a value of
nullor refers to a field that is missing,$roundreturnsnull.If the first argument resolves to
NaN,$roundreturnsNaN.If the first argument resolves to negative or positive infinity,
$roundreturns negative or positive infinity respectively.
Exemplo | Resultados |
|---|---|
|
|
|
|
|
|
|
|
Exemplo
Crie uma coleção denominada samples com os seguintes documentos:
db.samples.insertMany( [ { _id: 1, value: 19.25 }, { _id: 2, value: 28.73 }, { _id: 3, value: 34.32 }, { _id: 4, value: -45.39 } ] )
A seguinte agregação retorna
valuearredondado para a primeira casa decimal:db.samples.aggregate([ { $project: { roundedValue: { $round: [ "$value", 1 ] } } } ]) A operação retorna os seguintes resultados:
{ "_id" : 1, "roundedValue" : 19.2 } { "_id" : 2, "roundedValue" : 28.7 } { "_id" : 3, "roundedValue" : 34.3 } { "_id" : 4, "roundedValue" : -45.4 } A seguinte agregação retorna
valuearredondado usando o primeiro dígito à esquerda do decimal:db.samples.aggregate([ { $project: { roundedValue: { $round: [ "$value", -1 ] } } } ]) A operação retorna os seguintes resultados:
{ "_id" : 1, "roundedValue" : 10 } { "_id" : 2, "roundedValue" : 20 } { "_id" : 3, "roundedValue" : 30 } { "_id" : 4, "roundedValue" : -50 } A seguinte agregação retorna
valuearredondado para todo o inteiro:db.samples.aggregate([ { $project: { roundedValue: { $round: [ "$value", 0 ] } } } ]) A operação retorna os seguintes resultados:
{ "_id" : 1, "roundedValue" : 19 } { "_id" : 2, "roundedValue" : 29 } { "_id" : 3, "roundedValue" : 34 } { "_id" : 4, "roundedValue" : -45 }