Modulo en JavaScript - grand nombre
J'ai essayer de calculer avec JS' modulo fonction, mais ne pas obtenir le bon résultat (qui devrait être de 1). Voici une codé en dur morceau de code.
var checkSum = 210501700012345678131468;
alert(checkSum % 97);
Result: 66
Quel est le problème ici?
Ce qui concerne,
Benedikt
source d'informationauteur Benedikt
Vous devez vous connecter pour publier un commentaire.
Un tas d'améliorations à Benedikt la version: "crête +=" + cDivident;" est une correction de bug; parseInt(diviseur) permet de faire passer les deux arguments comme des chaînes de caractères; vérifier la chaîne vide à la fin, il est toujours en revenir à des valeurs numériques; ajout var états il n'est donc pas l'utilisation de variables globales; converti foreach vieux style de sorte qu'il fonctionne dans les navigateurs avec les anciens Javascript; fixe la crête == 0; bug (merci @Dan.StackOverflow).
Pour un IBAN calcul de la forme normale de numéro de compte bancaire, je me retrouve avec un très grand nombre contenu dans un type de données chaîne. De ce grand nombre je dois trouver le repos lorsqu'il est divisé par 97 -> grand nombre % 97.
Dès que j'ai de convertir le type de données à un nombre entier-je obtenir un dépassement de capacité résultant en un nombre entier négatif et finalement un mal de repos de la valeur. Comme je l'ai vu certains détaillé des morceaux de code (qui a également donné de mauvais résultats), je ne pouvais pas résister à partager ma propre. Les crédits vont à Trouver le Module d'un Très Grand Nombre avec un Nombre Normal
N. B.
J'utilise 10 postes ici car c'est plus petit que le 15 (et) les positions de max entier en JavaScript, il en résulte un nombre plus grand que 97 et c'est un beau chiffre rond. Les deux premiers arguments de la matière.
on dirait que vous avez été victime de cette: Qu'est-ce que JavaScript est plus haute valeur entière d'un Nombre peut aller sans perdre de précision?
juste pour rappeler que ce qui est dans l'autre thread:
Mais de crédit lorsque le crédit est dû. Jimmy a obtenu la accepté de répondre plus là pour faire le travail sur le terrain (bien, googler).
Enfin, ma solution:
Silencieux Matt a développé un Javascript bibliothèque pour les Grands Entiers. Il pourrait résoudre ce problème.
Pour ceux qui veulent simplement copier&pâte de travail (fonctionnelle) de la solution dans l'ES6 pour vérifier les codes iban:
Vous pouvez même écrire comme un one-liner.
Le modulo opération est effectuée sur le tableau d'entiers de stocker le nombre réel (
divident
appliqué comme une chaîne de caractères à la fonction):Cela fonctionne parce que le Modulo est distributive sur l'addition, de la soustraction et de la multiplication:
L'IBAN fonction transpiled à ES5 ressemble: