Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Проблемы с переводом в разные системы исчисления (https://javascript.ru/forum/misc/51881-problemy-s-perevodom-v-raznye-sistemy-ischisleniya.html)

BaBaKa 23.11.2014 19:14

Проблемы с переводом в разные системы исчисления
 
Доброго времени суток!

Мне приходиться с весьма крупными числами при переводе из одной системы в другую (из 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;
	}
}


Часовой пояс GMT +3, время: 05:49.