Retour au Blog
Plateforme

Précision de Number JavaScript et portabilité entre runtimes

Préservez les valeurs numériques entre IEEE-754, BigInt, JSON et les replis de runtime.

BotBrowser Team

Documentation

Vous voulez la documentation structurée pour Plateforme ?

Cet article fait partie de la bibliothèque éditoriale. Pour les étapes de configuration, la référence et les mises à jour continues, passez directement à la section docs.

La portabilité numérique est un contrat de données. Une valeur traverse formulaire, calcul JavaScript, JSON, worker et service, et chaque frontière peut modifier sa représentation. Number suit binary64 IEEE-754 : de nombreux décimaux et grands entiers ne sont pas exacts. Nommez la représentation avant de comparer les runtimes.

Frontières de représentation

Utilisez Number lorsque plage et arrondi conviennent à binary64. Number.MAX_SAFE_INTEGER vaut 2^53 - 1; vérifiez avec Number.isSafeInteger avant le calcul. BigInt gère les entiers arbitraires, pas les fractions ni le mélange implicite avec Number. Gardez les identifiants longs en texte ou BigInt et refusez les conversions ambiguës.

La référence MDN Number et la référence MDN BigInt décrivent le langage, pas la justesse d’un solde. Le contrat métier reste à tester.

Entiers sûrs et arrondi

Définissez mode, unité et frontière d’arrondi. Math.round n’est pas une politique financière universelle, notamment pour les moitiés négatives. Utilisez des entiers mis à l’échelle ou du texte décimal si l’exactitude compte. Séparez affichage localisé et valeur canonique; Intl.NumberFormat produit une vue, pas une nouvelle valeur.

Testez valeurs négatives, moitiés, extrêmes grands et petits. Ne tentez pas de reconstruire un identifiant après une conversion Number qui a perdu des bits.

JSON et sérialisation

JSON ne possède pas de type BigInt. JSON.stringify({ amount: 1n }) échoue sans politique. Employez une forme étiquetée comme { "kind": "bigint", "value": "9007199254740993" }, puis validez étiquette et plage avant de créer le BigInt. Les décimaux exacts passent par une chaîne déclarant échelle et signe, non par un nombre JSON implicite.

Testez entier sûr, premier entier non sûr, 0.1 + 0.2, moitié négative et identifiant 64 bits dans fenêtre, worker et service. Comparez représentation canonique et résultat métier.

Repli entre runtimes

Sondez le chemin réel avec une capacité comme bigint-json-adapter-v2, jamais une identité navigateur. Si l’adaptateur manque, relisez l’entrée originale et choisissez texte ou service avec le même schéma. Après une conversion Number non sûre, les bits perdus ne sont pas récupérables.

BotBrowser peut exécuter des parcours autorisés de formulaires numériques, sérialisation et comparaison répétable dans ses pipelines documentés, mais il ne change pas IEEE-754, n’ajoute pas l’arithmétique décimale et ne certifie pas un calcul métier. Voir BotBrowser Advanced features.

Entrée et preuves

Créez le dossier de tâche avant parsing et gardez texte, signe, échelle et schéma. Utilisez fixtures limites, annulation, redémarrage de worker, tag invalide et endpoint ancien. Les diagnostics gardent étape et version, pas soldes ni identifiants. Annoncez le repli, gardez le focus et permettez la correction. Consultez la validation des versions et le guide de compatibilité.

Registre fixe de version

Publiez schéma, exemples, parser, serializer, mode d’arrondi, repli, contextes et sorties attendues. Séparez exactitude et durée. Conservez la preuve négative d’un JSON legacy refusant BigInt et de l’adaptateur étiqueté le préservant. Une correction crée une fiche immuable nouvelle. La séquence est représentation, garde, sérialisation, sonde, repli, preuve.

Le contrat client choisit une forme canonique.

Les zéros initiaux peuvent appartenir à l’identifiant.

L’arrondi s’applique une fois à la frontière déclarée.

L’affichage localisé ne remplace pas la valeur stockée.

Le signe reste présent lors d’un changement de représentation.

L’échelle accompagne chaque décimal transmis.

Une valeur hors plage produit un état récupérable.

L’utilisateur peut corriger le champ sans le retaper.

L’adaptateur garde l’entrée lors d’un changement de route.

Le service reçoit le schéma attendu.

Fenêtre et worker partagent les exemples canoniques.

Le parseur valide avant de convertir.

Le serializer refuse les types non déclarés.

La réponse JSON garde la même échelle.

La comparaison vérifie type et résultat.

Le test contient une valeur négative.

Le test contient une moitié exacte.

Le test contient un entier proche de la limite.

Le test contient une chaîne avec zéros initiaux.

Le test contient une entrée vide.

Le test contient une étiquette inconnue.

L’annulation laisse la source disponible.

Le redémarrage du worker ne change pas le contrat.

Le cache utilise la forme canonique.

La mise à jour conserve l’ancienne compatibilité.

La documentation montre un cas accepté et un cas refusé.

L’interface annonce le repli choisi.

La sortie visible indique l’unité.

Le support reçoit étape et version, pas la valeur privée.

Une entrée numérique traverse des frontières de représentation vers un résultat vérifié.

Sources publiques

#JavaScript#Précision Numérique#BigInt#Portabilité

Faites passer BotBrowser de la recherche à la production

Utilisez ces guides pour comprendre le modèle, puis passez à la validation multi-plateforme, aux contextes isolés et au déploiement navigateur prêt pour l'échelle.