Definição
$trunc$trunctruncates a number to a whole integer or to a specified decimal place.
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 does not round the truncated data. To round input values to a specified place, use the $round expression.
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.
If you need a floating point number for an application that requires high precison, consider a Decimal128 value. For details, see BSON.Decimal128.
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
If the argument resolves to a value of
nullor refers to a field that is missing,$truncreturnsnull.If the argument resolves to
NaN,$truncreturnsNaN.If the argument resolves to negative or positive infinity,
$truncreturns negative or positive infinity respectively.
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 }