2010-12-02 5 views
3

Je suis un newbie jscript et j'ai un problème.Erreur de précision dans JScript?

Je suis en train d'écrire un script pour valider un numéro de compte bancaire IBAN en Belgique. J'ai besoin de remplacer certaines lettres par leur position dans une chaîne de recherche et ensuite je convertis cette chaîne en un nombre pour passer le test modulo 97.

La première partie se passe bien, mais ensuite avec la conversion de chaîne en nombre, 10 est ajouté à mon numéro. Je ne sais pas ce que je fais mal.

function checkIBAN() 
{ 
    var iban = crmForm.all.fp_iban.DataValue; 

    if (iban != null) 
    { 
    iban = iban.substring(4) + iban.substring(0, 4); 

    iban = iban.toUpperCase(); 
    var searchString = 'ABCDEFGHIJKLMNOPQRSTUVWXYZ'; 
    var pos; 
    var tmp = ''; 

    for (x = 0; x < iban.length; x++) { 
     pos = searchString.search(RegExp(iban.charAt(x),'i')); 
     if (pos == -1) 
     return false; 
     else 
     tmp += pos.toString(); 
    } 

    alert(tmp); // Here my value is 735320036532111490 

    var nr =parseInt(tmp); 

    alert(nr); // Now my value seems to be 735320036532111500 
    alert(nr % 97); 
    if (nr % 97 != 1) 
    { 
     alert('IBAN number is not correct !'); 
    } 
    } 
} 

Répondre

2

Oui, 735320036532111490 est simplement une trop grande valeur pour stocker dans un int. Il sera toujours arrondi:

alert(735320036532111490/10); 
// alerts 73532003653211150 

Here's a solution that might work for you.

+0

OK, thi ssolved mon problème, –

+0

Merci pour ce lien! J'ai créé un port Javascript qui peut être utile: http://jsfiddle.net/nDSmZ/ – Blaise

0

Spécifiez toujours la base lors de l'utilisation de parseInt.

var nr =parseInt(tmp, 10); 

Pour plus d'informations de référence: https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/parseInt

+1

Merci pour l'astuce –

+1

cela devrait être un commentaire, car il ne résout pas le problème à portée de main –

+0

@David Hedlund +1 votre commentaire - tu as raison.

Questions connexes