Ошибка точности в JScript? - PullRequest
       7

Ошибка точности в JScript?

3 голосов
/ 02 декабря 2010

Я новичок в 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 ]

2 голосов
/ 02 декабря 2010

Да, 735320036532111490 просто слишком большое значение для хранения в int.Это всегда будет округлено:

alert(735320036532111490 / 10);
// alerts 73532003653211150

Вот решение, которое может работать для вас .

0 голосов
/ 02 декабря 2010

Всегда указывайте основание при использовании parseInt.

var nr =parseInt(tmp, 10);

Для справочной информации: https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/parseInt

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...