UNPKG

mathjs

Version:

Math.js is an extensive math library for JavaScript and Node.js. It features a flexible expression parser and offers an integrated solution to work with numbers, big numbers, complex numbers, units, and matrices.

69 lines (56 loc) 1.78 kB
module.exports = function (math) { var util = require('../../util/index'), BigNumber = math.type.BigNumber, collection = require('../../type/collection'), isCollection = collection.isCollection, isNumber = util.number.isNumber, isString = util.string.isString; /** * Create a boolean or convert a string or number to a boolean. * In case of a number, true is returned for non-zero numbers, and false in * case of zero. * Strings can be 'true' or 'false', or can contain a number. * When value is a matrix, all elements will be converted to boolean. * @param {String | Number | Boolean | Array | Matrix} value * @return {Boolean | Array | Matrix} bool */ math['boolean'] = function bool (value) { if (arguments.length != 1) { throw new math.error.ArgumentsError('boolean', arguments.length, 0, 1); } if (value === 'true' || value === true) { return true; } if (value === 'false' || value === false) { return false; } if (value instanceof Boolean) { return value == true; } if (isNumber(value)) { return (value !== 0); } if (value instanceof BigNumber) { return !value.isZero(); } if (isString(value)) { // try case insensitive var lcase = value.toLowerCase(); if (lcase === 'true') { return true; } else if (lcase === 'false') { return false; } // test whether value is a valid number var num = Number(value); if (value != '' && !isNaN(num)) { return (num !== 0); } } if (isCollection(value)) { return collection.deepMap(value, bool); } throw new SyntaxError(value.toString() + ' is no valid boolean'); }; };