$round (agregação)
Nesta página
Definição
$round
$round
arredonda um número para um número inteiro ou para uma casa decimal especificada.$round
tem a seguinte sintaxe:{ $round : [ <number>, <place> ] } CampoTipoDescrição<number>
número<place>
inteiroOpcional 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 é0
se não for especificado.Se
<place>
for resolvido em um número inteiro positivo,$round
será arredondado para<place>
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,$round
arredondará usando o dí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
<place>
for igual ou superior ao número de dígitos à esquerda do decimal,$round
retornará0
.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>
resultar em0
,$round
arredonda usando o primeiro dígito à direita do decimal e retorna um valor inteiro arredondado.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
null
ou se referir a um campo ausente,$round
retornaránull
.Se o primeiro argumento se resolver em
NaN
,$round
retornaráNaN
.Se o primeiro argumento resultar em um infinito negativo ou positivo,
$round
retornará respectivamente um infinito negativo ou positivo.
Exemplo | Resultados |
---|---|
{ $round: [ NaN, 1] } | NaN |
{ $round: [ null, 1] } | null |
{ $round : [ Infinity, 1 ] } | Infinity |
{ $round : [ -Infinity, 1 ] } | -Infinity |
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
value
arredondado 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
value
arredondado 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
value
arredondado 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 }