Definição
$trunc$trunctrunca um número para um número inteiro ou para uma casa decimal especificada.
Sintaxe
O operador $trunc tem a seguinte sintaxe:
{ $trunc : [ <number>, <place> ] }
Campo | Tipo | Descrição |
|---|---|---|
| número | |
| inteiro | Opcional Pode ser qualquer expressão válida que resulte em um número inteiro entre -20 e 100, exclusive. Por exemplo,
|
A expressão <number> pode ser qualquer expressão válida, desde que seja resolvida como um número. Para mais informações sobre expressões, consulte Expressões.
Comportamento
$trunc não arredonda os dados truncados. Para arredondar valores de entrada para um local especificado, utilize a expressão $round .
Tipo de dados retornados
O tipo de dados retornado corresponde ao tipo de dados da expressão ou valor de entrada.
Precisão de truncamento com números de ponto flutuante
Se você imprimir um número de ponto flutuante de precisão dupla 4.56 com 20 dígitos após o separador decimal, verá 4.55999999999999960920, que é um pouco menor que 4.56 e é truncado para 4.55.
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.
null, NaN e +/- Infinity
Se o argumento for resolvido para um valor de
nullou se referir a um campo ausente,$truncretornaránull.Se o argumento se resolve em
NaN,$truncretornaNaN.Se o argumento resolver para infinito negativo ou positivo,
$truncretornará infinito negativo ou positivo respectivamente.
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.34 } ] )
A seguinte aggregation retorna
valuetruncado para a primeira casa decimal:db.samples.aggregate([ { $project: { truncatedValue: { $trunc: [ "$value", 1 ] } } } ]) A operação retorna os seguintes resultados:
{ "_id" : 1, "truncatedValue" : 19.2 } { "_id" : 2, "truncatedValue" : 28.7 } { "_id" : 3, "truncatedValue" : 34.3 } { "_id" : 4, "truncatedValue" : -45.3 } A seguinte aggregation retorna
valuetruncado para o primeiro lugar:db.samples.aggregate([ { $project: { truncatedValue: { $trunc: [ "$value", -1 ] } } } ]) A operação retorna os seguintes resultados:
{ "_id" : 1, "truncatedValue" : 10 } { "_id" : 2, "truncatedValue" : 20 } { "_id" : 3, "truncatedValue" : 30 } { "_id" : 4, "truncatedValue" : -40 } A seguinte aggregation retorna ''valor'' truncado para todo o inteiro:
db.samples.aggregate([ { $project: { truncatedValue: { $trunc: [ "$value", 0 ] } } } ]) A operação retorna os seguintes resultados:
{ "_id" : 1, "truncatedValue" : 19 } { "_id" : 2, "truncatedValue" : 28 } { "_id" : 3, "truncatedValue" : 34 } { "_id" : 4, "truncatedValue" : -45 }