mirror of
https://github.com/josdejong/mathjs.git
synced 2025-12-08 19:46:04 +00:00
59 lines
1.6 KiB
JavaScript
59 lines
1.6 KiB
JavaScript
var Decimal = require('decimal.js');
|
|
var digits = require('../util/number').digits;
|
|
|
|
function factory (type, config, load, typed) {
|
|
var BigNumber = Decimal.constructor(config);
|
|
|
|
/**
|
|
* Get a JSON representation of a BigNumber containing
|
|
* type information
|
|
* @returns {Object} Returns a JSON object structured as:
|
|
* `{"mathjs": "BigNumber", "value": "0.2"}`
|
|
*/
|
|
BigNumber.prototype.toJSON = function () {
|
|
return {
|
|
mathjs: 'BigNumber',
|
|
value: this.toString()
|
|
};
|
|
};
|
|
|
|
/**
|
|
* Instantiate a BigNumber from a JSON object
|
|
* @param {Object} json a JSON object structured as:
|
|
* `{"mathjs": "BigNumber", "value": "0.2"}`
|
|
* @return {BigNumber}
|
|
*/
|
|
BigNumber.fromJSON = function (json) {
|
|
return new BigNumber(json.value);
|
|
};
|
|
|
|
// TODO: remove BigNumber.convert as soon as it's deprecated
|
|
// extend BigNumber with a function convert
|
|
if (typeof BigNumber.convert !== 'function') {
|
|
/**
|
|
* Try to convert a Number in to a BigNumber.
|
|
* If the number has 15 or mor significant digits, the Number cannot be
|
|
* converted to BigNumber and will return the original number.
|
|
* @param {Number} number
|
|
* @return {BigNumber | Number} bignumber
|
|
*/
|
|
BigNumber.convert = function(number) {
|
|
if (digits(number) > 15) {
|
|
return number;
|
|
}
|
|
else {
|
|
return new BigNumber(number);
|
|
}
|
|
};
|
|
}
|
|
else {
|
|
throw new Error('Cannot add function convert to BigNumber: function already exists');
|
|
}
|
|
|
|
return BigNumber;
|
|
}
|
|
|
|
exports.name = 'BigNumber';
|
|
exports.path = 'type';
|
|
exports.factory = factory;
|