JScript中的精度错误?

时间:2010-12-02 08:46:55

标签: dynamics-crm javascript

我是一个jscript新手,我有一个问题。

我正在编写一个脚本来验证比利时的IBAN银行帐号。我需要用搜索字符串中的位置替换一些字母,然后将此字符串转换为数字以进行模97测试。

第一部分进展顺利,但之后从字符串转换为数字,10加到我的号码。我不知道我做错了什么。

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 = '0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ';
    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 !');
    }
  }
}

2 个答案:

答案 0 :(得分:2)

是的,735320036532111490只是存储在int中的值太大了。它总是圆润的:

alert(735320036532111490 / 10);
// alerts 73532003653211150

Here's a solution that might work for you

答案 1 :(得分:0)

使用parseInt时始终指定基数。

var nr =parseInt(tmp, 10);

参考资料:https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/parseInt