Décimales sans limitations en JavaScript

Vous ne voulez pas d'erreurs dans vos applications commerciales ou scientifiques, n'est-ce pas ?
Dans le blog précédentnous avons vu les problèmes que nous pouvons rencontrer lors de l'utilisation du type de nombre en JavaScript.
Dans ce blog, nous verrons comment l'utilisation d'une bibliothèque décimale peut aider à résoudre ces problèmes.
Par exemple, Corticon.js utilise une bibliothèque décimale pour implémenter son type de données décimal low-code/no-code. La bibliothèque prend en charge les nombres avec n'importe quelle précision, les nombres petits et grands arbitraires et toutes les opérations mathématiques typiques, ce qui la rend adaptée aux applications commerciales et scientifiques.
Dans ce blog, nous mettrons en évidence les caractéristiques clés des décimales. Nous passerons également par la représentation des décimales dans la charge utile JSON. Et enfin, nous explorerons les options dont vous disposez pour configurer les décimales pour des performances maximales et si vous devez gérer des nombres extrêmement grands ou petits.
Limitations du type de nombre JavaScript
Nous avons vu dans ce blog que les nombres JavaScript ont certaines limitations qui peuvent être préjudiciables aux applications scientifiques et commerciales.
Voici un résumé de ces problèmes :
- Résultats incorrects avec des nombres inexacts.
- Les calculs flottants ne sont pas déterministes.
- Les nombres très grands ou très petits ne peuvent pas être traités, en particulier lors de l'utilisation d'entiers.
Veuillez vous référer au le blog pour plus de détails.
Bibliothèque décimale
Une bibliothèque décimale peut aider à résoudre ces problèmes. Dans Corticon.js, nous exploitons une excellente bibliothèque décimale pour implémenter notre type de données décimal. La bibliothèque s'appelle decimal.js et vous pouvez trouver la doc ici. Il est également disponible sur Github à l'adresse https://github.com/MikeMcl/decimal.js.
La principale caractéristique de cette bibliothèque et par extension, le type de données Corticon.js Decimal, est qu'elles peuvent représenter et opérer sur des nombres avec une précision arbitraire. Cela permet la prise en charge d'applications commerciales et scientifiques, car nous pouvons effectuer des calculs avec des nombres arbitraires petits ou grands et sélectionner la précision nécessaire. .js par rapport au type de nombre en JavaScript.
Nous pouvons effectuer les opérations suivantes, par exemple, contrairement à l'utilisation du nombre JavaScript, 0,1 + 0,2 est égal à 0,3. Ou dans une application scientifique, on pourrait multiplier 123456789e+250 par 10e+150. Cela donnera le résultat correct 1.23456789e+409 (en JavaScript, ceux-ci dépasseraient le nombre maximum).
Alors, comment n'y a-t-il pas de limitations ? Tout simplement parce que vous pouvez configurer la précision des nombres. La précision est un paramètre de configuration et est un concept clé à comprendre.
De quoi s'agit-il exactement ? Ce paramètre est le nombre de chiffres significatifs utilisés pour renvoyer les résultats (c'est-à-dire le nombre de chiffres renvoyés auxquels les calculs sont arrondis). Voir ce lien.
Par défaut, ce paramètre est défini sur 20. La plupart du temps, cette valeur par défaut sera suffisante, mais dans certains cas, vous souhaiterez peut-être l'ajuster en fonction de vos besoins. Le compromis est que le temps de calcul augmentera avec des chiffres plus précis. En d'autres termes, plus la précision est élevée, plus vous aurez de chiffres pour représenter des nombres, mais les calculs prendront plus de CPU.
Ne soyez pas confus : la précision n'est pas le nombre de décimales. Au lieu de cela, il s'agit du nombre de chiffres significatifs utilisés pour exprimer les nombres renvoyés.
Regardons quelques exemples pour voir l'effet et la signification du paramètre de précision.
Nous utiliserons des ensembles de précision à 5. C'est un valeur irréaliste pour la plupart des cas, mais il est plus facile de comprendre les exemples ci-dessous.
Exemple 1 :
L'arrondi a lieu pour les petits nombres.
Decimal 0.123456789 multiplié par 1 donnera 0.12346 (5 est arrondi car il est suivi de 6).
Decimal 0,123456789 plus 1000 donnera 1000,1 (avec seulement 5 chiffres de précision, nous perdons la partie fractionnaire 0,023456789).
Exemple 2:[19659026]Mais les grands nombres peuvent contenir 5 chiffres ou moins. Par exemple :
1 000 000 000 décimal plus 2 000 000 000 000 décimal donneront le résultat correct 3 000 000 000 000.
C'est parce que ces nombres peuvent être exprimés avec 5 chiffres ou moins. Par exemple, ils pourraient être exprimés sous la forme 1 x 10e12 et 2 x 10e12. Pour ces deux nombres, nous n'avons besoin que de 3 chiffres : un pour le nombre et 2 pour l'exposant.
Par exemple, nous pouvons voir la représentation interne dans la bibliothèque decimal.js du premier nombre ci-dessous à l'aide d'un inspecteur de débogage :[19659003]
Remarque : lorsqu'elle est définie sur 0, la notation d'exposant est toujours renvoyée.
Remarque : lorsqu'elle est définie sur 0, la notation d'exposant est toujours renvoyée.
Voir la section suivante pour une description de toutes les configurations options.
Autres options de configuration
Voici des champs de configuration supplémentaires pour contrôler les opérations décimales :
La configuration doit être insérée dans l'objet de configuration principal dans le champ "decimal."
- précision : Le nombre maximum de chiffres significatifs du résultat d'une opération.
nombre : entier, de 1 à 1e+9 inclus
Valeur par défaut : 20 - arrondi : Le mode d'arrondi par défaut utilisé lors de l'arrondi de la résolution ult d'une opération à la précision des chiffres significatifs.
Valeur par défaut : 4 (ROUND_HALF_UP)
0 Arrondis à partir de zéro
1 Arrondis vers zéro
2 Arrondis vers l'infini
3 Arrondis vers -Infinity
4 Ronds vers le voisin le plus proche. Si équidistant, arrondi à partir de zéro
5 Arrondit vers le voisin le plus proche. Si équidistant, arrondit vers zéro
6 Arrondit vers le plus proche voisin. Si équidistant, arrondit vers le voisin pair
7 Arrondit vers le voisin le plus proche. Si équidistant, arrondit vers Infinity
8 Arrondit vers le voisin le plus proche. Si équidistants, les arrondis vers -Infinity
Les modes d'arrondi 0 à 6 (inclus) sont les mêmes que ceux de la classe BigDecimal de Java.
Voir pour référence https://www.mathsisfun.com/ number/rounding-methods.html et https://en.wikipedia.org/wiki/Rounding.
Exemple :
|
En conclusion, comme nous l'avions vu dans le précédent blogon peut avoir des problèmes de calcul avec les nombres JavaScript.
Corticon. js prend en charge les applications commerciales et scientifiques à l'aide d'un type décimal robuste qui évite les problèmes avec les nombres JavaScript. Il a également la capacité d'exprimer des nombres arbitraires petits et grands, ce qui le rend adapté aux applications commerciales et scientifiques les plus exigeantes.
Source link