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 (62 loc) 2.02 kB
module.exports = function (math) { var util = require('../../util/index'), isString = util.string.isString; /** * Interpolate values into a string template. * * Syntax: * * math.print(template, values) * math.print(template, values, precision) * * Example usage: * * // the following outputs: 'The value of pi is 3.141592654' * math.format('The value of pi is $pi', {pi: math.pi}, 10); * * // the following outputs: 'hello Mary! The date is 2013-03-23' * math.format('Hello $user.name! The date is $date', { * user: { * name: 'Mary', * }, * date: new Date().toISOString().substring(0, 10) * }); * * @param {String} template * @param {Object} values * @param {Number} [precision] Number of digits to format numbers. * If not provided, the value will not be rounded. * @return {String} str */ math.print = function print (template, values, precision) { var num = arguments.length; if (num != 2 && num != 3) { throw new math.error.ArgumentsError('print', num, 2, 3); } if (!isString(template)) { throw new TypeError('String expected as first parameter in function format'); } if (!(values instanceof Object)) { throw new TypeError('Object expected as second parameter in function format'); } // format values into a string return template.replace(/\$([\w\.]+)/g, function (original, key) { var keys = key.split('.'); var value = values[keys.shift()]; while (keys.length && value !== undefined) { var k = keys.shift(); value = k ? value[k] : value + '.'; } if (value !== undefined) { if (!isString(value)) { return math.format(value, precision); } else { return value; } } return original; } ); }; };