0
votes

Comment puis-je empêcher que Google Cloud fonctionne de générer de petites compensations lors de la soustraction d'un numéro?

J'ai un comportement vraiment étrange avec des nombres soustrayers dans Google Firestore avec Google Cloud Fonctions.

Voici mon test Google Fonctions Code: P>

firebase functions:shell
testCounter({test: "demo"})


0 commentaires

3 Réponses :


0
votes

Ce n'est en fait pas un problème de Firebase, juste inhérent à des chiffres de points flottants.

(4.9990000006).toFixed(4); // 4.9990


0 commentaires

2
votes

Ceci est un comportement standard pour les numéros de point flottant à l'aide du IEEE 754 standard, ce qui est ce qui est quoi Fireestore utilise . Mettez brièvement, les ordinateurs perdent une précision lors de la conservation de données de point flottant efficacement.

Si vous n'êtes pas en mesure d'accepter ce comportement, vous ne devez pas conserver du tout des numéros de points flottants et stockez simplement des entiers. L'entier doit contenir toute la précision requise que vous auriez normalement besoin d'équivalent à point flottant, à l'exception de votre flotteur par la précision requise.

Par exemple, si vous avez besoin de trois points décimaux de précision (par exemple 5.005), multipliez que le flotteur de 1000, déposez la partie fractionnée et stockez l'entier 5005. Si vous devez ajouter .005, vous devriez plutôt ajouter 5 . Ensuite, vous pouvez formater ce numéro de tous lesquels vous souhaitez sur le client.


0 commentaires

0
votes

Comme expliqué par Doug, le problème provient du comportement des numéros de points flottants.

Une solution consiste à utiliser, dans votre fonction Cloud, le Big.Js bibliothèque .

Il fonctionne bien dans les fonctions de cloud (comme dans n'importe quel code nœud.js), mais cela signifie que vous ne pourrez pas utiliser admin.firestore.fieldvalue.fieldvalue.incrènement () plus.


0 commentaires