Доброго времени суток!
Мне приходиться с весьма крупными числами при переводе из одной системы в другую (из 10 в 32 и обратно).
Перевод в 32 систему работает нормально, но в 10-ую систему переводит в число типа 1.04010101080108e+26.
Как мне от этого избавиться?
P.S. нашел сервис который работает с такими числами хорошо, но не могу найти часть кода что отвечает за перевод чисел (
http://planetcalc.ru/375/)
Вот моя функция для перевода в 10-ую систему исчисления (для перевода в какую либо другую нужно еще дописать).
String.prototype.toSystem = function (to, from) {
if (!to) return false;
var n = '0123456789abcdefghijklmnopqrstuvwxyz';
var bool = new Array (true, false);
from = from || 10;
if (from > n.length || from < 0 || to > n.length || to < 0) return false;
if(this.length > 0) {
for (var i = 0; i < this.length && bool[0]; i++) {
bool[1] = false;
for (var k = 0; k < from && !bool[1]; k++) {
if (this[i].toLowerCase() == n[k]) {
bool[1] = true;
}
}
if (!bool[1]) bool[0] = false;
}
if (bool[0]) {
alert(n.find('/'));
var result = 0;
for (var i = 0; i < this.length; i++) {
result += n.find(this[this.length-1-i].toLowerCase()) * Math.pow(from, i);
}
if (to != 10) {
console.log(' >> Перевод из 10 системы в ' + to);
}
return result;
} else {
return 'Validation failed.';
}
} else return false;
}
String.prototype.find = Array.prototype.find = function (v) {
if ([].indexOf) {
return this.indexOf(v);
} else {
for (var i = 0; i < this.length; i++) {
if (this[i] === v) return i;
}
return -1;
}
}