Estou trabalhando em uma função de métricas do lado do cliente. No entanto, a operação de incremento adiciona números longos de ponto flutuante a um campo do Firestore, embora eu tenha fixado meu valor em duas casas decimais. Parece que o Firestore ainda armazena valores longos de ponto flutuante.
const verdict = Number((actionData - afterActionData).toFixed(2));
const payload = {
[todayDate]: {
[dataKey()]: increment(+verdict)
};
await updateDoc(fireStoreMetricsDoc, payload);
Isso sempre acontecerá em números de ponto flutuante. Eles sacrificam a precisão para poder armazenar uma gama maior de números no espaço alocado.
Você tem poucas opções:
Arredonde o número para o número correto de dígitos ao exibi-lo.
Armazene o número do ponto fixo como uma string, ou seja
"3.04"
, pois o Firestore não oferece suporte a números de ponto fixo (muito poucos sistemas oferecem).increment
Mas nesse caso você perderia a capacidade de fazer contas por meio do operador.Armazene-os como valores completos - ou seja, se for uma moeda, armazene-os como centavos para que se torne
304
. Na verdade, esta é a maneira mais comum de armazenar números de pontos fixos.Veja também: