Menu Docs
Página inicial do Docs
/ /

$round (agregaçã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> ] }
Campo
Tipo
Descrição

<number>

número

Pode ser qualquerexpressão válida que resolva um número. Especificamente, a expressão deve ser resolvida para um número inteiro, double, decimal ou long.

$round retorna um erro se a expressão for resolvida para um tipo de dados não numéricos.

<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 é 0 se 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 um 1234.57.

  • Se <place> produzir um número inteiro negativo, arredonda usando o$round dígito <place> à esquerda do decimal.

    Por exemplo, $round : [1234.5678, -2] usa o segundo dígito à esquerda do decimal (3) e retorna 1200.

    Se o valor absoluto de for <place> igual ou superior ao número de dígitos à esquerda do decimal, $round 0retornará.

    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 retorna 0.

  • Se <place> resultar 0 em, arredonda usando o primeiro dígito à direita do decimal e retorna um valor inteiro$round arredondado.

    Por exemplo, $round : [1234.5678, 0] gera 1235.

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.

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.

O tipo de dados retornado corresponde ao tipo de dados da expressão ou valor de entrada.

  • 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

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 }

Voltar

$reverseArray

Nesta página