functionfoundry
Version:
Pure function JavaScript library
69 lines (51 loc) • 1.98 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = dec2bin;
var _rept = require('./rept');
var _rept2 = _interopRequireDefault(_rept);
var _error = require('./error');
var _error2 = _interopRequireDefault(_error);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
// based on https://github.com/sutoiku/formula.js/blob/mast../src/engineering.js
// Copyright 2015 JC Fisher
function dec2bin(input, places) {
// exit if input is an error
if (input instanceof Error) {
return number;
}
// cast input to number
var number = parseInt(input);
if (!/^-?[0-9]{1,3}$/.test(number) || Number.isNaN(number)) {
return _error2.default.value;
}
// Return error.if number is not decimal, is lower than -512, or is greater than 511
if (number < -512 || number > 511) {
return _error2.default.num;
}
// Ignore places and return a 10-character binary number if number is negative
if (number < 0) {
return '1' + (0, _rept2.default)('0', 9 - (512 + number).toString(2).length) + (512 + number).toString(2);
}
// Convert decimal number to binary
var result = parseInt(number, 10).toString(2);
// Return binary number using the minimum number of characters necessary if places is undefined
if (typeof places === 'undefined') {
return result;
} else {
// Return error.if places is nonnumeric
if (!/^-?[0-9]{1,3}$/.test(places) || Number.isNaN(places)) {
return _error2.default.value;
}
// Return error.if places is negative
if (places < 0) {
return _error2.default.num;
}
// Truncate places in case it is not an integer
places = Math.floor(places);
// Pad return value with leading 0s (zeros) if necessary (using Underscore.string)
return places >= result.length ? (0, _rept2.default)('0', places - result.length) + result : _error2.default.num;
}
}
module.exports = exports['default'];