Skip to content

Instantly share code, notes, and snippets.

@zspecza
Last active August 29, 2015 13:57
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save zspecza/9591888 to your computer and use it in GitHub Desktop.
Save zspecza/9591888 to your computer and use it in GitHub Desktop.
A little brainstorm on converting between number bases in JavaScript. Feedback is welcome.
;(function(undefined) {
'use strict';
var debug = function(err) {
console.error(err.message + '\n' + err.stack);
};
try {
var global = this;
var BaseConverter = (function() {
function BaseConverter() {};
BaseConverter.prototype.convert = function(num) {
this.from = function(baseFrom) {
baseFrom = normalize(baseFrom);
this.to = function(baseTo) {
baseTo = normalize(baseTo);
if (numeric(num)) {
return parseFloat((parseFloat(num, baseFrom) >>> 0).toString(baseTo), baseTo);
} else {
throw new Error('BaseConverter: convert() expected a number or a numeric string but instead got: "' + num + '"');
}
};
return this;
};
return this;
};
var numeric = function(n) { return !isNaN(parseFloat(n)) && isFinite(n) };
var normalize = function(base) {
switch (base) {
case 'bin':
case 'binary':
base = 2;
break;
case 'oct':
case 'octal':
base = 8;
break;
case 'dec':
case 'decimal':
base = 10;
break;
case 'hex':
case 'hexadecimal':
base = 16;
break;
default:
base = base;
}
return base;
};
return BaseConverter;
})();
global.convert = (new BaseConverter()).convert;
} catch (err) {
debug(err);
}
}).call(this);
// usage:
/**
* try {
* console.log(convert(2).from('decimal').to('binary')); // outputs: "10"
* } catch (error) {
* console.error(error.message);
* }
*/
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment