$(function() { var input = $('input'); $('button#toDec').click(function() { var val = input.val(); var decimal = hexavigesimal.toDecimal(val); $('span').text(decimal); return; }); $('button#toHex').click(function() { var val = input.val(); var alpha = hexavigesimal.toAlphaNumber(val); $('span').text(alpha); return; }); }); var hexavigesimal = function() { var _alphabet = "ABCDEFGHIJKLMNOPQRSTUVWXYZ"; var self = this; self.toDecimal = function(alphaNumber) { if (!alphaNumber.match(/[a-z]/i)) { alert('Input must be alphabetic') return;} var _alphaNumber = alphaNumber.toUpperCase(); var decimalValues = _alphaNumber.split("").reverse().map(function(char, index) { return self.charToDecimal(char) * Math.pow(26, index); }); return decimalValues.reduce(function(memo, num) { return memo + num; }, 0); }; self.toAlphaNumber = function(decimal) { if (!decimal.match(/^\d+$/)) { alert('Input must be numeric'); return; } var remainders = [], remainder = 0; for (var counter = 1; remainder != decimal; counter++) { remainder = decimal % (Math.pow(26, counter)); remainders.push(remainder); } var mappedChars = remainders.map(function(remainder, index) { var charCode = Math.floor(remainder / (Math.pow(26, index))); return self.decimalToChar(charCode); }); return mappedChars.reverse().join(""); }; self.charToDecimal = function(char) { return _alphabet.indexOf(char) + 1; }; self.decimalToChar = function(decimal) { return _alphabet.substring(decimal - 1, decimal); }; return self; }();
<h2>Convert between decimal and hexavigesimal</h2> <div> Input: <input id="decimal" type="text" /> </div> <strong>Output:</strong> <span id="output"></span> <br> <button id="toDec">To Decimal</button> <button id="toHex">To Hexavigesimal</button>