Decimal128 (Decimal de Alta Precisão)
Última atualização: 2026-10-09
Decimal128 (Decimal de Alta Precisão)
Decimal128 é o tipo decimal de alta precisão do MongoDB, baseado no padrão de ponto flutuante decimal IEEE 754-2008, com 34 dígitos decimais significativos. Ele serve para dinheiro, taxas e outros dados que precisam de aritmética exata, evitando os erros de arredondamento binário do Double. Construa com `Decimal128('19.99')` ou o atalho do mongosh 5.0+ `NumberDecimal('19.99')`.
| Categoria | Tipos BSON |
|---|---|
| Versão do MongoDB | 1.0+ |
| Idioma do Exemplo | mongosh (Shell) |
📝 Sintaxe
Decimal128("<decimal string>")
NumberDecimal("<decimal string>") // mongosh 5.0+
{ price: Decimal128("19.99") }
Retorno:Retorna um valor BSON Decimal128
▶ Exemplo
Execute os comandos abaixo no seu mongosh local (requer um mongod em execução):
// Decimal128: constrói e faz correspondência exata
use shop
db.prices.insertOne({ item: 'apple', price: Decimal128('19.99') })
db.prices.find({ price: { $eq: Decimal128('19.99') } })
Saída:
{ _id: ObjectId('...'), item: 'apple', price: Decimal128('19.99') }
📌 Notas
- 34 dígitos decimais significativos — muito mais preciso que Double
- Use Decimal128 em toda aritmética de dinheiro para evitar arredondamento acumulado
- Decimal128 e Double são tipos distintos; $eq entre eles é falso
- Converta para string na agregação com $toString para a saída
🏷️ Tags Relacionados
💡 Casos Relacionados
Documentos e BSON: a base dos dados do MongoDB
Inserção de documentos: uma explicação detalhada sobre `insertOne` e `insertMany`
Modelos do Mongoose e projeto de esquemas
📚 Tutoriais Relacionados
❓ Perguntas Frequentes
QQual é a diferença entre Decimal128 e Double?
ADouble é ponto flutuante binário onde 0.1 é inexato; Decimal128 armazena dígitos decimais (34 significativos) para matemática de dinheiro exata.
QQuão grande um valor Decimal128 pode ser?
AA faixa de expoente é aproximadamente ±6143 e a faixa de valor cerca de ±9.99×10^6144 — além de qualquer necessidade de negócio.
QPor que armazenar preços como Decimal128?
ADinheiro precisa de aritmética decimal exata; somas com Double divergem (ex.: 0.30000000000000004), quebrando a reconciliação.