Definição
$round$roundarredonda um número para um número inteiro ou para uma casa decimal especificada.$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.Se for
<place>resolvido para um número inteiro positivo,$round<place>arredonda para casas decimais.Por exemplo,
$round : [1234.5678, 2]arredonda para duas casas decimais e retorna um1234.57.Se
<place>produzir um número inteiro negativo, arredonda usando o$rounddígito<place>à esquerda do decimal.Por exemplo,
$round : [1234.5678, -2]usa o segundo dígito à esquerda do decimal (3) e retorna1200.Se o valor absoluto de for
<place>igual ou superior ao número de dígitos à esquerda do decimal,$round0retornará.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.Se
<place>resultar0em, arredonda usando o primeiro dígito à direita do decimal e retorna um valor inteiro$roundarredondado.Por exemplo,
$round : [1234.5678, 0]gera1235.
Comportamento
Arredondando para valores pares
Ao arredondar um valor de 5, $round arredonda para o valor par mais próximo. Por exemplo, considere os seguintes documentos de amostragem:
{_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.
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
Se o primeiro argumento for resolvido para um valor de
nullou se referir a um campo ausente,$roundretornaránull.Se o primeiro argumento se resolver em
NaN,$roundretornaráNaN.Se o primeiro argumento resultar em um infinito negativo ou positivo,
$roundretornará respectivamente um infinito negativo ou positivo.
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 }