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.
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.
Se você precisar de um número de ponto flutuante para um aplicação que exige alta precisão, considere um Decimal128 valor. Para detalhes, consulte BSON.Decimal.128
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
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 }