mirror of
https://github.com/josdejong/mathjs.git
synced 2026-01-25 15:07:57 +00:00
Switched to module decimal.js for BigNumber support, instead of bignumber.js.
This commit is contained in:
parent
721f21574e
commit
d19e7ea570
@ -2,8 +2,10 @@
|
||||
https://github.com/josdejong/mathjs
|
||||
|
||||
|
||||
## not yet released, version 0.19.1
|
||||
## not yet released, version 0.20.0
|
||||
|
||||
- Switched to module `decimal.js` for BigNumber support, instead of
|
||||
`bignumber.js`.
|
||||
- Implemented conditional operator `a ? b : c` in expression parser.
|
||||
- Improved function `ifElse`, is now specified for special data types too.
|
||||
- Minor bug fixes.
|
||||
|
||||
@ -16,19 +16,14 @@ Available configuration settings are:
|
||||
like `eval `which cannot determine the correct type of output from the
|
||||
functions input. For most functions though, the type of output is determined
|
||||
from the the input: a number as input will return a number as output,
|
||||
a bignumber as input returns a bignumber as output.
|
||||
a BigNumber as input returns a BigNumber as output.
|
||||
Available values are: `'number'` (default) or `'bignumber'`.
|
||||
Big numbers have higher precision than the default numbers of JavaScript.
|
||||
BigNumbers have higher precision than the default numbers of JavaScript.
|
||||
|
||||
- `decimals`. The maximum number of decimal places behind the decimal
|
||||
point (not the number of significant digits). Only applies to big numbers,
|
||||
point (not the number of significant digits). Only applies to BigNumbers,
|
||||
not to numbers. Default value is 20.
|
||||
|
||||
*Important: This setting is applied application wide to all BigNumbers.
|
||||
Behind the scenes, this setting is applied as the global `DECIMAL_PLACES`
|
||||
setting of the [bignumber.js](https://github.com/MikeMcl/bignumber.js)
|
||||
library used by math.js.*
|
||||
|
||||
|
||||
## Examples
|
||||
|
||||
@ -72,13 +67,13 @@ math2.config({
|
||||
math2.range(0, 4); // Matrix [0, 1, 2, 3]
|
||||
```
|
||||
|
||||
### Configuration for big numbers
|
||||
### Configuration for BigNumbers
|
||||
|
||||
```js
|
||||
// load the library
|
||||
var mathjs = require('mathjs');
|
||||
|
||||
// use big numbers by default
|
||||
// use BigNumbers by default
|
||||
var math3 = mathjs({
|
||||
number: 'bignumber',
|
||||
decimals: 32
|
||||
|
||||
@ -1,33 +1,36 @@
|
||||
# Big Numbers
|
||||
# BigNumbers
|
||||
|
||||
For calculations with an arbitrary precision, math.js supports BigNumber.
|
||||
BigNumber is powered by the the library
|
||||
[bignumber.js](https://github.com/MikeMcl/bignumber.js/).
|
||||
For calculations with an arbitrary precision, math.js supports a `BigNumber`
|
||||
data type. BigNumber support is powered by
|
||||
[decimal.js](https://github.com/MikeMcl/decimal.js/).
|
||||
|
||||
A big number can be created using the function `bignumber`:
|
||||
A BigNumber can be created using the function `bignumber`:
|
||||
|
||||
```js
|
||||
math.bignumber('2.3e+500'); // BigNumber, 2.3e+500
|
||||
```
|
||||
|
||||
Most functions can determine the type of output from the type of input:
|
||||
a number as input will return a number as output, a bignumber as input returns
|
||||
a bignumber as output. Functions which cannot determine the type of output
|
||||
a number as input will return a number as output, a BigNumber as input returns
|
||||
a BigNumber as output. Functions which cannot determine the type of output
|
||||
from the input (for example `math.eval`) use the default number type `number`,
|
||||
which can be configured when instantiating math.js. To configure the use of big
|
||||
numbers instead of [numbers](numbers.md) by default, configure math.js like:
|
||||
which can be configured when instantiating math.js. To configure the use of
|
||||
BigNumbers instead of [numbers](numbers.md) by default, configure math.js like:
|
||||
|
||||
```js
|
||||
var mathjs = require('mathjs'),
|
||||
math = mathjs({
|
||||
number: 'bignumber', // Default type of number: 'number' (default) or 'bignumber'
|
||||
decimals: 20 // Number decimal places behind the dot for big numbers
|
||||
decimals: 20 // Number of decimal places behind the dot for BigNumbers
|
||||
});
|
||||
|
||||
// use math
|
||||
math.eval('0.1 + 0.2'); // BigNumber, 0.3
|
||||
```
|
||||
|
||||
The default precision for BigNumber is 20 digits, and can be configured with
|
||||
the option `decimals`.
|
||||
|
||||
*Important:
|
||||
BigNumber is not supported by the following functions:
|
||||
exp, gcd, lcm, log, log10, xgcd,
|
||||
@ -45,29 +48,18 @@ precision, it is less likely that round-off errors occur:
|
||||
math.add(0.1, 0.2); // Number, 0.30000000000000004
|
||||
math.divide(0.3, 0.2); // Number, 1.4999999999999998
|
||||
|
||||
// no round-off errors with big numbers :)
|
||||
// no round-off errors with BigNumbers :)
|
||||
math.add(math.bignumber(0.1), math.bignumber(0.2)); // BigNumber, 0.3
|
||||
math.divide(math.bignumber(0.3), math.bignumber(0.2)); // BigNumber, 1.5
|
||||
```
|
||||
|
||||
The default precision for BigNumber is 20 digits. This is a global setting
|
||||
in the [underlying BigNumber library](https://github.com/MikeMcl/bignumber.js/),
|
||||
which can be changed by configuring BigNumber:
|
||||
|
||||
```js
|
||||
BigNumber.config({DECIMAL_PLACES: 32});
|
||||
```
|
||||
|
||||
*Important: To work with small numbers, `DECIMAL_PLACES` must be configured
|
||||
sufficiently large.*
|
||||
|
||||
Big numbers can be converted to numbers and vice versa using the functions
|
||||
BigNumbers can be converted to numbers and vice versa using the functions
|
||||
`number` and `bignumber`. When converting a BigNumber to a Number, the high
|
||||
precision of the BigNumber will be lost. When a BigNumber is too large to be represented
|
||||
as Number, it will be initialized as `Infinity`.
|
||||
|
||||
```js
|
||||
// converting numbers and bignumbers
|
||||
// converting numbers and BigNumbers
|
||||
var a = math.number(0.3); // Number, 0.3
|
||||
var b = math.bignumber(a); // BigNumber, 0.3
|
||||
var c = math.number(b); // Number, 0.3
|
||||
|
||||
@ -24,7 +24,7 @@ math.subtract(7.1, 2.3); // 4.8
|
||||
math.round(math.pi, 3); // 3.142
|
||||
math.sqrt(4.41e2); // 21
|
||||
|
||||
// use big numbers
|
||||
// use BigNumbers
|
||||
math.add(math.bignumber(0.1), math.bignumber(0.2)); // BigNumber, 0.3
|
||||
|
||||
// use strings
|
||||
|
||||
@ -4,11 +4,11 @@ Math.js supports two types of numbers:
|
||||
|
||||
- Number for fast floating point arithmetic, described on this page.
|
||||
- BigNumber for arbitrary precision arithmetic, describe on the page
|
||||
[Big Numbers](bignumbers.md).
|
||||
[BigNumbers](bignumbers.md).
|
||||
|
||||
Most functions can determine the type of output from the type of input:
|
||||
a number as input will return a number as output, a bignumber as input returns
|
||||
a bignumber as output. Functions which cannot determine the type of output
|
||||
a number as input will return a number as output, a BigNumber as input returns
|
||||
a BigNumber as output. Functions which cannot determine the type of output
|
||||
from the input (for example `math.eval`) use the default number type, which
|
||||
can be configured when instantiating math.js:
|
||||
|
||||
|
||||
@ -456,9 +456,9 @@ math.format(ans, {precision: 14}); // "0.3"
|
||||
```
|
||||
|
||||
|
||||
#### Big numbers
|
||||
#### BigNumbers
|
||||
|
||||
Math.js supports big numbers for calculations with an arbitrary precision.
|
||||
Math.js supports BigNumbers for calculations with an arbitrary precision.
|
||||
The pros and cons of Number and BigNumber are explained in detail on the page
|
||||
[Numbers](datatypes/numbers.md).
|
||||
|
||||
@ -484,7 +484,7 @@ var mathjs = require('mathjs'),
|
||||
math.eval('0.1 + 0.2'); // BigNumber, 0.3
|
||||
```
|
||||
|
||||
Big numbers can be converted to numbers and vice versa using the functions
|
||||
BigNumbers can be converted to numbers and vice versa using the functions
|
||||
`number` and `bignumber`. When converting a BigNumber to a Number, the high
|
||||
precision of the BigNumber will be lost. When a BigNumber is too large to be represented
|
||||
as Number, it will be initialized as `Infinity`.
|
||||
|
||||
@ -7,7 +7,7 @@
|
||||
- [Chained Operations](chained_operations.md)
|
||||
- [Data Types](datatypes/index.md)
|
||||
- [Numbers](datatypes/numbers.md)
|
||||
- [Big Numbers](datatypes/bignumbers.md)
|
||||
- [BigNumbers](datatypes/bignumbers.md)
|
||||
- [Complex Numbers](datatypes/complex_numbers.md)
|
||||
- [Matrices](datatypes/matrices.md)
|
||||
- [Units](datatypes/units.md)
|
||||
|
||||
@ -1,11 +1,11 @@
|
||||
// big numbers
|
||||
// BigNumbers
|
||||
|
||||
// load math.js and create an instance
|
||||
// the default type of numbers is configured as big numbers
|
||||
// the default type of numbers is configured as BigNumbers
|
||||
var mathjs = require('../index'),
|
||||
math = mathjs({
|
||||
number: 'bignumber', // Default type of number: 'number' (default) or 'bignumber'
|
||||
decimals: 20 // number decimal places behind the dot for big numbers
|
||||
decimals: 20 // number of decimal places behind the dot for BigNumbers
|
||||
});
|
||||
|
||||
/**
|
||||
@ -21,19 +21,19 @@ print(math.add(0.1, 0.2)); // Number, 0.30000000000000004
|
||||
print(math.divide(0.3, 0.2)); // Number, 1.4999999999999998
|
||||
console.log();
|
||||
|
||||
console.log('no round-off errors with big numbers');
|
||||
console.log('no round-off errors with BigNumbers');
|
||||
print(math.add(math.bignumber(0.1), math.bignumber(0.2))); // BigNumber, 0.3
|
||||
print(math.divide(math.bignumber(0.3), math.bignumber(0.2))); // BigNumber, 1.5
|
||||
console.log();
|
||||
|
||||
console.log('create big numbers from strings when exceeding the range of a number');
|
||||
console.log('create BigNumbers from strings when exceeding the range of a number');
|
||||
print(math.bignumber(1.2e+500)); // BigNumber, Infinity WRONG
|
||||
print(math.bignumber('1.2e+500')); // BigNumber, 1.2e+500
|
||||
console.log();
|
||||
|
||||
// one can work conveniently with big numbers using the expression parser.
|
||||
// note though that big numbers are only supported in arithmetic functions
|
||||
console.log('use big numbers in the expression parser');
|
||||
// one can work conveniently with BigNumbers using the expression parser.
|
||||
// note though that BigNumbers are only supported in arithmetic functions
|
||||
console.log('use BigNumbers in the expression parser');
|
||||
print(math.eval('0.1 + 0.2')); // BigNumber, 0.3
|
||||
print(math.eval('0.3 / 0.2')); // BigNumber, 1.5
|
||||
console.log();
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
var Node = require('./Node'),
|
||||
Complex = require('../../type/Complex'),
|
||||
BigNumber = require('bignumber.js'),
|
||||
BigNumber = require('../../type/BigNumber'),
|
||||
string = require('../../util/string'),
|
||||
isString = string.isString;
|
||||
|
||||
|
||||
@ -1,12 +1,12 @@
|
||||
var number= require('../../util/number.js'),
|
||||
var number= require('../../util/number'),
|
||||
|
||||
Node = require('./Node.js'),
|
||||
RangeNode = require('./RangeNode.js'),
|
||||
SymbolNode = require('./SymbolNode.js'),
|
||||
RangeNode = require('./RangeNode'),
|
||||
SymbolNode = require('./SymbolNode'),
|
||||
|
||||
BigNumber = require('bignumber.js'),
|
||||
Index = require('../../type/Index.js'),
|
||||
Range = require('../../type/Range.js'),
|
||||
BigNumber = require('../../type/BigNumber'),
|
||||
Index = require('../../type/Index'),
|
||||
Range = require('../../type/Range'),
|
||||
|
||||
isNumber = number.isNumber,
|
||||
toNumber = number.toNumber,
|
||||
|
||||
@ -4,7 +4,7 @@ var number= require('../../util/number'),
|
||||
RangeNode = require('./RangeNode'),
|
||||
SymbolNode = require('./SymbolNode'),
|
||||
|
||||
BigNumber = require('bignumber.js'),
|
||||
BigNumber = require('../../type/BigNumber'),
|
||||
Index = require('../../type/Index'),
|
||||
Range = require('../../type/Range'),
|
||||
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
var number = require('../../util/number'),
|
||||
Node = require('./Node'),
|
||||
|
||||
BigNumber = require('bignumber.js'),
|
||||
BigNumber = require('../../type/BigNumber'),
|
||||
Range = require('../../type/Range'),
|
||||
Matrix = require('../../type/Matrix'),
|
||||
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
var Node = require('./Node'),
|
||||
|
||||
BigNumber = require('bignumber.js'),
|
||||
BigNumber = require('../../type/BigNumber'),
|
||||
Complex = require('../../type/Complex'),
|
||||
Unit = require('../../type/Unit'),
|
||||
|
||||
|
||||
@ -5,7 +5,7 @@ var number= require('../../util/number'),
|
||||
IndexNode = require('./IndexNode'),
|
||||
SymbolNode = require('./SymbolNode'),
|
||||
|
||||
BigNumber = require('bignumber.js'),
|
||||
BigNumber = require('../../type/BigNumber'),
|
||||
Index = require('../../type/Index'),
|
||||
Range = require('../../type/Range'),
|
||||
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
module.exports = function (math) {
|
||||
var util = require('../../util/index'),
|
||||
|
||||
BigNumber = require('bignumber.js'),
|
||||
BigNumber = require('../../type/BigNumber'),
|
||||
Complex = require('../../type/Complex'),
|
||||
Matrix = require('../../type/Matrix'),
|
||||
collection = require('../../type/collection'),
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
module.exports = function (math) {
|
||||
var util = require('../../util/index'),
|
||||
|
||||
BigNumber = require('bignumber.js'),
|
||||
BigNumber = require('../../type/BigNumber'),
|
||||
Complex = require('../../type/Complex'),
|
||||
Matrix = require('../../type/Matrix'),
|
||||
Unit = require('../../type/Unit'),
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
module.exports = function (math) {
|
||||
var util = require('../../util/index'),
|
||||
|
||||
BigNumber = require('bignumber.js'),
|
||||
BigNumber = require('../../type/BigNumber'),
|
||||
Complex = require('../../type/Complex'),
|
||||
collection = require('../../type/collection'),
|
||||
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
module.exports = function (math) {
|
||||
var util = require('../../util/index'),
|
||||
|
||||
BigNumber = require('bignumber.js'),
|
||||
BigNumber = require('../../type/BigNumber'),
|
||||
Complex = require('../../type/Complex'),
|
||||
Unit = require('../../type/Unit'),
|
||||
collection = require('../../type/collection'),
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
module.exports = function (math) {
|
||||
var util = require('../../util/index'),
|
||||
|
||||
BigNumber = require('bignumber.js'),
|
||||
BigNumber = require('../../type/BigNumber'),
|
||||
Complex = require('../../type/Complex'),
|
||||
collection = require('../../type/collection'),
|
||||
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
module.exports = function(math) {
|
||||
var util = require('../../util/index'),
|
||||
|
||||
BigNumber = require('bignumber.js'),
|
||||
BigNumber = require('../../type/BigNumber'),
|
||||
Complex = require('../../type/Complex'),
|
||||
Matrix = require('../../type/Matrix'),
|
||||
Unit = require('../../type/Unit'),
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
module.exports = function (math) {
|
||||
var util = require('../../util/index'),
|
||||
|
||||
BigNumber = require('bignumber.js'),
|
||||
BigNumber = require('../../type/BigNumber'),
|
||||
Complex = require('../../type/Complex'),
|
||||
Unit = require('../../type/Unit'),
|
||||
collection = require('../../type/collection'),
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
module.exports = function (math) {
|
||||
var util = require('../../util/index'),
|
||||
|
||||
BigNumber = require('bignumber.js'),
|
||||
BigNumber = require('../../type/BigNumber'),
|
||||
Complex = require('../../type/Complex'),
|
||||
Matrix = require('../../type/Matrix'),
|
||||
collection = require('../../type/collection'),
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
module.exports = function (math) {
|
||||
var util = require('../../util/index'),
|
||||
|
||||
BigNumber = require('bignumber.js'),
|
||||
BigNumber = require('../../type/BigNumber'),
|
||||
Complex = require('../../type/Complex'),
|
||||
collection = require('../../type/collection'),
|
||||
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
module.exports = function (math) {
|
||||
var util = require('../../util/index'),
|
||||
|
||||
BigNumber = require('bignumber.js'),
|
||||
BigNumber = require('../../type/BigNumber'),
|
||||
Complex = require('../../type/Complex'),
|
||||
collection = require('../../type/collection'),
|
||||
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
module.exports = function (math) {
|
||||
var util = require('../../util/index'),
|
||||
|
||||
BigNumber = require('bignumber.js'),
|
||||
BigNumber = require('../../type/BigNumber'),
|
||||
collection = require('../../type/collection'),
|
||||
|
||||
isNumber = util.number.isNumber,
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
module.exports = function (math) {
|
||||
var util = require('../../util/index'),
|
||||
|
||||
BigNumber = require('bignumber.js'),
|
||||
BigNumber = require('../../type/BigNumber'),
|
||||
Complex = require('../../type/Complex'),
|
||||
Unit = require('../../type/Unit'),
|
||||
collection = require('../../type/collection'),
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
module.exports = function (math) {
|
||||
var util = require('../../util/index'),
|
||||
|
||||
BigNumber = require('bignumber.js'),
|
||||
BigNumber = require('../../type/BigNumber'),
|
||||
Complex = require('../../type/Complex'),
|
||||
Unit = require('../../type/Unit'),
|
||||
collection = require('../../type/collection'),
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
module.exports = function (math) {
|
||||
var util = require('../../util/index'),
|
||||
|
||||
BigNumber = require('bignumber.js'),
|
||||
BigNumber = require('../../type/BigNumber'),
|
||||
collection = require('../../type/collection'),
|
||||
|
||||
isNumber = util.number.isNumber,
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
module.exports = function (math) {
|
||||
var util = require('../../util/index'),
|
||||
|
||||
BigNumber = require('bignumber.js'),
|
||||
BigNumber = require('../../type/BigNumber'),
|
||||
Complex = require('../../type/Complex'),
|
||||
collection = require('../../type/collection'),
|
||||
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
module.exports = function (math) {
|
||||
var util = require('../../util/index'),
|
||||
|
||||
BigNumber = require('bignumber.js'),
|
||||
BigNumber = require('../../type/BigNumber'),
|
||||
Complex = require('../../type/Complex'),
|
||||
collection = require('../../type/collection'),
|
||||
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
module.exports = function (math) {
|
||||
var util = require('../../util/index'),
|
||||
|
||||
BigNumber = require('bignumber.js'),
|
||||
BigNumber = require('../../type/BigNumber'),
|
||||
collection = require('../../type/collection'),
|
||||
|
||||
isNumber = util.number.isNumber,
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
module.exports = function(math) {
|
||||
var util = require('../../util/index'),
|
||||
|
||||
BigNumber = require('bignumber.js'),
|
||||
BigNumber = require('../../type/BigNumber'),
|
||||
Complex = require('../../type/Complex'),
|
||||
Matrix = require('../../type/Matrix'),
|
||||
Unit = require('../../type/Unit'),
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
module.exports = function (math) {
|
||||
var util = require('../../util/index'),
|
||||
|
||||
BigNumber = require('bignumber.js'),
|
||||
BigNumber = require('../../type/BigNumber'),
|
||||
Complex = require('../../type/Complex'),
|
||||
Matrix = require('../../type/Matrix'),
|
||||
collection = require('../../type/collection'),
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
module.exports = function (math) {
|
||||
var util = require('../../util/index'),
|
||||
|
||||
BigNumber = require('bignumber.js'),
|
||||
BigNumber = require('../../type/BigNumber'),
|
||||
Complex = require('../../type/Complex'),
|
||||
collection = require('../../type/collection'),
|
||||
|
||||
@ -43,7 +43,7 @@ module.exports = function (math) {
|
||||
}
|
||||
|
||||
if (x instanceof BigNumber) {
|
||||
return x.round();
|
||||
return x.toDecimalPlaces(0);
|
||||
}
|
||||
|
||||
if (isCollection(x)) {
|
||||
@ -85,7 +85,7 @@ module.exports = function (math) {
|
||||
}
|
||||
|
||||
if (x instanceof BigNumber) {
|
||||
return x.round(n);
|
||||
return x.toDecimalPlaces(n);
|
||||
}
|
||||
|
||||
if (isCollection(x) || isCollection(n)) {
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
module.exports = function (math) {
|
||||
var util = require('../../util/index'),
|
||||
|
||||
BigNumber = require('bignumber.js'),
|
||||
BigNumber = require('../../type/BigNumber'),
|
||||
Complex = require('../../type/Complex'),
|
||||
collection = require('../../type/collection'),
|
||||
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
module.exports = function (math) {
|
||||
var util = require('../../util/index'),
|
||||
|
||||
BigNumber = require('bignumber.js'),
|
||||
BigNumber = require('../../type/BigNumber'),
|
||||
Complex = require('../../type/Complex'),
|
||||
Unit = require('../../type/Unit'),
|
||||
collection = require('../../type/collection'),
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
module.exports = function (math) {
|
||||
var util = require('../../util/index'),
|
||||
|
||||
BigNumber = require('bignumber.js'),
|
||||
BigNumber = require('../../type/BigNumber'),
|
||||
Complex = require('../../type/Complex'),
|
||||
Unit = require('../../type/Unit'),
|
||||
collection = require('../../type/collection'),
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
module.exports = function (math) {
|
||||
var util = require('../../util/index'),
|
||||
|
||||
BigNumber = require('bignumber.js'),
|
||||
BigNumber = require('../../type/BigNumber'),
|
||||
Complex = require('../../type/Complex'),
|
||||
collection = require('../../type/collection'),
|
||||
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
module.exports = function (math) {
|
||||
var util = require('../../util/index'),
|
||||
|
||||
BigNumber = require('bignumber.js'),
|
||||
BigNumber = require('../../type/BigNumber'),
|
||||
Complex = require('../../type/Complex'),
|
||||
collection = require('../../type/collection'),
|
||||
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
module.exports = function (math) {
|
||||
var util = require('../../util/index'),
|
||||
|
||||
BigNumber = require('bignumber.js'),
|
||||
BigNumber = require('../../type/BigNumber'),
|
||||
Complex = require('../../type/Complex'),
|
||||
Matrix = require('../../type/Matrix'),
|
||||
Unit = require('../../type/Unit'),
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
module.exports = function (math) {
|
||||
var util = require('../../util/index'),
|
||||
|
||||
BigNumber = require('bignumber.js'),
|
||||
BigNumber = require('../../type/BigNumber'),
|
||||
Complex = require('../../type/Complex'),
|
||||
Unit = require('../../type/Unit'),
|
||||
collection = require('../../type/collection'),
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
module.exports = function (math) {
|
||||
var util = require('../../util/index'),
|
||||
|
||||
BigNumber = require('bignumber.js'),
|
||||
BigNumber = require('../../type/BigNumber'),
|
||||
Complex = require('../../type/Complex'),
|
||||
Unit = require('../../type/Unit'),
|
||||
collection = require('../../type/collection'),
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
module.exports = function (math) {
|
||||
var util = require('../../util/index'),
|
||||
|
||||
BigNumber = require('bignumber.js'),
|
||||
BigNumber = require('../../type/BigNumber'),
|
||||
|
||||
toNumber = util.number.toNumber,
|
||||
isNumber = util.number.isNumber,
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
module.exports = function (math) {
|
||||
var util = require('../../util/index'),
|
||||
|
||||
BigNumber = require('bignumber.js'),
|
||||
BigNumber = require('../../type/BigNumber'),
|
||||
Complex = require('../../type/Complex'),
|
||||
collection = require('../../type/collection'),
|
||||
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
module.exports = function (math) {
|
||||
var util = require('../../util/index'),
|
||||
|
||||
BigNumber = require('bignumber.js'),
|
||||
BigNumber = require('../../type/BigNumber'),
|
||||
Complex = require('../../type/Complex'),
|
||||
collection = require('../../type/collection'),
|
||||
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
module.exports = function (math) {
|
||||
var util = require('../../util/index'),
|
||||
|
||||
BigNumber = require('bignumber.js'),
|
||||
BigNumber = require('../../type/BigNumber'),
|
||||
Complex = require('../../type/Complex'),
|
||||
collection = require('../../type/collection'),
|
||||
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
module.exports = function (math) {
|
||||
var util = require('../../util/index'),
|
||||
|
||||
BigNumber = require('bignumber.js'),
|
||||
BigNumber = require('../../type/BigNumber'),
|
||||
Complex = require('../../type/Complex'),
|
||||
collection = require('../../type/collection'),
|
||||
|
||||
|
||||
@ -1,7 +1,8 @@
|
||||
module.exports = function (math) {
|
||||
var util = require('../../util/index'),
|
||||
|
||||
BigNumber = require('bignumber.js'),
|
||||
// create a non-global instance of BigNumber
|
||||
BigNumber = require('../../type/BigNumber'),
|
||||
collection = require('../../type/collection'),
|
||||
|
||||
isCollection = collection.isCollection,
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
module.exports = function (math) {
|
||||
var util = require('../../util/index'),
|
||||
|
||||
BigNumber = require('bignumber.js'),
|
||||
BigNumber = require('../../type/BigNumber'),
|
||||
collection = require('../../type/collection'),
|
||||
|
||||
isCollection = collection.isCollection,
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
module.exports = function (math) {
|
||||
var util = require('../../util/index'),
|
||||
|
||||
BigNumber = require('bignumber.js'),
|
||||
BigNumber = require('../../type/BigNumber'),
|
||||
Complex = require('../../type/Complex'),
|
||||
collection = require('../../type/collection'),
|
||||
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
module.exports = function (math) {
|
||||
var util = require('../../util/index'),
|
||||
|
||||
BigNumber = require('bignumber.js'),
|
||||
BigNumber = require('../../type/BigNumber'),
|
||||
Index = require('../../type/Index'),
|
||||
|
||||
toNumber = util.number.toNumber;
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
module.exports = function (math) {
|
||||
var util = require('../../util/index'),
|
||||
|
||||
BigNumber = require('bignumber.js'),
|
||||
BigNumber = require('../../type/BigNumber'),
|
||||
collection = require('../../type/collection'),
|
||||
|
||||
isCollection = collection.isCollection,
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
module.exports = function (math) {
|
||||
var util = require('../../util/index'),
|
||||
|
||||
BigNumber = require('bignumber.js'),
|
||||
BigNumber = require('../../type/BigNumber'),
|
||||
Unit = require('../../type/Unit'),
|
||||
collection = require('../../type/collection'),
|
||||
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
module.exports = function (math, settings) {
|
||||
var util = require('../../util/index'),
|
||||
|
||||
BigNumber = require('bignumber.js'),
|
||||
BigNumber = require('../../type/BigNumber'),
|
||||
Matrix = require('../../type/Matrix'),
|
||||
collection = require('../../type/collection'),
|
||||
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
module.exports = function (math, settings) {
|
||||
var util = require('../../util/index'),
|
||||
|
||||
BigNumber = require('bignumber.js'),
|
||||
BigNumber = require('../../type/BigNumber'),
|
||||
Matrix = require('../../type/Matrix'),
|
||||
collection = require('../../type/collection'),
|
||||
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
module.exports = function (math, settings) {
|
||||
var util = require('../../util/index'),
|
||||
|
||||
BigNumber = require('bignumber.js'),
|
||||
BigNumber = require('../../type/BigNumber'),
|
||||
Matrix = require('../../type/Matrix'),
|
||||
collection = require('../../type/collection'),
|
||||
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
module.exports = function (math, settings) {
|
||||
var util = require('../../util/index'),
|
||||
|
||||
BigNumber = require('bignumber.js'),
|
||||
BigNumber = require('../../type/BigNumber'),
|
||||
Matrix = require('../../type/Matrix'),
|
||||
|
||||
array = util.array,
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
module.exports = function (math, settings) {
|
||||
var util = require('../../util/index'),
|
||||
|
||||
BigNumber = require('bignumber.js'),
|
||||
BigNumber = require('../../type/BigNumber'),
|
||||
Complex = require('../../type/Complex'),
|
||||
Unit = require('../../type/Unit'),
|
||||
Matrix = require('../../type/Matrix'),
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
module.exports = function (math, settings) {
|
||||
var util = require('../../util/index'),
|
||||
|
||||
BigNumber = require('bignumber.js'),
|
||||
BigNumber = require('../../type/BigNumber'),
|
||||
Matrix = require('../../type/Matrix'),
|
||||
collection = require('../../type/collection'),
|
||||
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
module.exports = function (math) {
|
||||
var util = require('../../util/index'),
|
||||
|
||||
BigNumber = require('bignumber.js'),
|
||||
BigNumber = require('../../type/BigNumber'),
|
||||
collection = require('../../type/collection'),
|
||||
|
||||
isNumber = util.number.isNumber,
|
||||
@ -74,6 +74,6 @@ module.exports = function (math) {
|
||||
* @returns {boolean} isPositiveInteger
|
||||
*/
|
||||
var isPositiveInteger = function(n) {
|
||||
return n.round().equals(n) && n.gte(0);
|
||||
return n.isInteger() && n.gte(0);
|
||||
};
|
||||
};
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
module.exports = function (math) {
|
||||
var util = require('../../util/index'),
|
||||
|
||||
BigNumber = require('bignumber.js'),
|
||||
BigNumber = require('../../type/BigNumber'),
|
||||
collection = require('../../type/collection'),
|
||||
|
||||
isNumber = util.number.isNumber,
|
||||
@ -85,6 +85,6 @@ module.exports = function (math) {
|
||||
* @returns {boolean} isPositiveInteger
|
||||
*/
|
||||
var isPositiveInteger = function(n) {
|
||||
return n.round().equals(n) && n.gte(0);
|
||||
return n.isInteger() && n.gte(0);
|
||||
};
|
||||
};
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
module.exports = function (math) {
|
||||
var util = require('../../util/index'),
|
||||
|
||||
BigNumber = require('bignumber.js'),
|
||||
BigNumber = require('../../type/BigNumber'),
|
||||
|
||||
isNumber = util.number.isNumber,
|
||||
isInteger = util.number.isInteger,
|
||||
@ -89,6 +89,6 @@ module.exports = function (math) {
|
||||
* @returns {boolean} isPositiveInteger
|
||||
*/
|
||||
var isPositiveInteger = function(n) {
|
||||
return n.round().equals(n) && n.gte(0);
|
||||
return n.isInteger() && n.gte(0);
|
||||
};
|
||||
};
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
module.exports = function (math) {
|
||||
var Matrix = require('../../type/Matrix'),
|
||||
Unit = require('../../type/Unit'),
|
||||
BigNumber = require('bignumber.js'),
|
||||
BigNumber = require('../../type/BigNumber'),
|
||||
collection = require('../../type/collection'),
|
||||
|
||||
isNumber = require('../../util/number').isNumber,
|
||||
|
||||
@ -1,6 +1,6 @@
|
||||
module.exports = function (math) {
|
||||
var Matrix = require('../../type/Matrix'),
|
||||
BigNumber = require('bignumber.js'),
|
||||
BigNumber = require('../../type/BigNumber'),
|
||||
collection = require('../../type/collection'),
|
||||
|
||||
isCollection = collection.isCollection,
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
module.exports = function (math) {
|
||||
var util = require('../../util/index'),
|
||||
|
||||
BigNumber = require('bignumber.js'),
|
||||
BigNumber = require('../../type/BigNumber'),
|
||||
Complex = require('../../type/Complex'),
|
||||
collection = require('../../type/collection'),
|
||||
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
module.exports = function (math) {
|
||||
var util = require('../../util/index'),
|
||||
|
||||
BigNumber = require('bignumber.js'),
|
||||
BigNumber = require('../../type/BigNumber'),
|
||||
Complex = require('../../type/Complex'),
|
||||
collection = require('../../type/collection'),
|
||||
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
module.exports = function (math) {
|
||||
var util = require('../../util/index'),
|
||||
|
||||
BigNumber = require('bignumber.js'),
|
||||
BigNumber = require('../../type/BigNumber'),
|
||||
Complex = require('../../type/Complex'),
|
||||
collection = require('../../type/collection'),
|
||||
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
module.exports = function (math) {
|
||||
var util = require('../../util/index'),
|
||||
|
||||
BigNumber = require('bignumber.js'),
|
||||
BigNumber = require('../../type/BigNumber'),
|
||||
Complex = require('../../type/Complex'),
|
||||
collection = require('../../type/collection'),
|
||||
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
module.exports = function (math) {
|
||||
var util = require('../../util/index'),
|
||||
|
||||
BigNumber = require('bignumber.js'),
|
||||
BigNumber = require('../../type/BigNumber'),
|
||||
Complex = require('../../type/Complex'),
|
||||
Unit = require('../../type/Unit'),
|
||||
collection = require('../../type/collection'),
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
module.exports = function (math) {
|
||||
var util = require('../../util/index'),
|
||||
|
||||
BigNumber = require('bignumber.js'),
|
||||
BigNumber = require('../../type/BigNumber'),
|
||||
Complex = require('../../type/Complex'),
|
||||
Unit = require('../../type/Unit'),
|
||||
collection = require('../../type/collection'),
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
module.exports = function (math) {
|
||||
var util = require('../../util/index'),
|
||||
|
||||
BigNumber = require('bignumber.js'),
|
||||
BigNumber = require('../../type/BigNumber'),
|
||||
Complex = require('../../type/Complex'),
|
||||
Unit = require('../../type/Unit'),
|
||||
collection = require('../../type/collection'),
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
module.exports = function (math) {
|
||||
var util = require('../../util/index'),
|
||||
|
||||
BigNumber = require('bignumber.js'),
|
||||
BigNumber = require('../../type/BigNumber'),
|
||||
Complex = require('../../type/Complex'),
|
||||
Unit = require('../../type/Unit'),
|
||||
collection = require('../../type/collection'),
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
module.exports = function (math) {
|
||||
var util = require('../../util/index'),
|
||||
|
||||
BigNumber = require('bignumber.js'),
|
||||
BigNumber = require('../../type/BigNumber'),
|
||||
Complex = require('../../type/Complex'),
|
||||
Unit = require('../../type/Unit'),
|
||||
collection = require('../../type/collection'),
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
module.exports = function (math) {
|
||||
var util = require('../../util/index'),
|
||||
|
||||
BigNumber = require('bignumber.js'),
|
||||
BigNumber = require('../../type/BigNumber'),
|
||||
Complex = require('../../type/Complex'),
|
||||
Unit = require('../../type/Unit'),
|
||||
collection = require('../../type/collection'),
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
module.exports = function (math) {
|
||||
var util = require('../../util/index'),
|
||||
|
||||
BigNumber = require('bignumber.js'),
|
||||
BigNumber = require('../../type/BigNumber'),
|
||||
Matrix = require('../../type/Matrix'),
|
||||
Complex = require('../../type/Complex'),
|
||||
Unit = require('../../type/Unit'),
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
module.exports = function (math) {
|
||||
var types = require('../../util/types'),
|
||||
|
||||
BigNumber = require('bignumber.js'),
|
||||
BigNumber = require('../../type/BigNumber'),
|
||||
Complex = require('../../type/Complex'),
|
||||
Matrix = require('../../type/Matrix'),
|
||||
Unit = require('../../type/Unit'),
|
||||
|
||||
15
lib/math.js
15
lib/math.js
@ -33,7 +33,10 @@ function mathjs (settings) {
|
||||
matrix: 'matrix',
|
||||
|
||||
// type of default number output. Choose 'number' (default) or 'bignumber'
|
||||
number: 'number'
|
||||
number: 'number',
|
||||
|
||||
// number of significant digits in bignumbers
|
||||
decimals: 20
|
||||
};
|
||||
|
||||
/**
|
||||
@ -49,7 +52,7 @@ function mathjs (settings) {
|
||||
* @return {Object} settings The currently applied settings
|
||||
*/
|
||||
math.config = function config (settings) {
|
||||
var BigNumber = require('bignumber.js');
|
||||
var BigNumber = require('./type/BigNumber');
|
||||
|
||||
if (settings) {
|
||||
// merge settings
|
||||
@ -57,7 +60,7 @@ function mathjs (settings) {
|
||||
|
||||
if (settings.decimals) {
|
||||
BigNumber.config({
|
||||
DECIMAL_PLACES: settings.decimals
|
||||
precision: settings.decimals // TODO: rename decimals to precision
|
||||
});
|
||||
}
|
||||
|
||||
@ -87,9 +90,7 @@ function mathjs (settings) {
|
||||
}
|
||||
|
||||
// return a clone of the settings
|
||||
var current = object.clone(_settings);
|
||||
current.decimals = BigNumber.config().DECIMAL_PLACES;
|
||||
return current;
|
||||
return object.clone(_settings);
|
||||
};
|
||||
|
||||
// apply provided configuration settings
|
||||
@ -107,7 +108,7 @@ function mathjs (settings) {
|
||||
|
||||
// types (Matrix, Complex, Unit, ...)
|
||||
math.type = {};
|
||||
math.type.BigNumber = require('bignumber.js');
|
||||
math.type.BigNumber = require('./type/BigNumber').constructor(); // create a new Decimal factory for this instance of math.js
|
||||
math.type.Complex = require('./type/Complex');
|
||||
math.type.Range = require('./type/Range');
|
||||
math.type.Index = require('./type/Index');
|
||||
|
||||
1
lib/type/BigNumber.js
Normal file
1
lib/type/BigNumber.js
Normal file
@ -0,0 +1 @@
|
||||
module.exports = require('decimal.js');
|
||||
@ -1,4 +1,4 @@
|
||||
var BigNumber = require('bignumber.js');
|
||||
var BigNumber = require('../type/BigNumber');
|
||||
|
||||
/**
|
||||
* Test whether value is a Number
|
||||
@ -166,16 +166,14 @@ exports.format = function format(value, options) {
|
||||
throw new Error('options.scientific is deprecated, use options.exponential instead.');
|
||||
}
|
||||
|
||||
// adjust BigNumber configuration
|
||||
// create a clone of the bignumber with the desired configuration
|
||||
var isBigNumber = value instanceof BigNumber;
|
||||
if (isBigNumber) {
|
||||
var oldScientific = BigNumber.config().EXPONENTIAL_AT;
|
||||
BigNumber.config({
|
||||
EXPONENTIAL_AT: [
|
||||
Math.round(Math.log(lower) / Math.LN10),
|
||||
Math.round(Math.log(upper) / Math.LN10)
|
||||
]
|
||||
var BN = BigNumber.config({
|
||||
toExpNeg: Math.round(Math.log(lower) / Math.LN10),
|
||||
toExpPos: Math.round(Math.log(upper) / Math.LN10)
|
||||
});
|
||||
value = new BN(value);
|
||||
}
|
||||
|
||||
// handle special case zero
|
||||
@ -203,10 +201,12 @@ exports.format = function format(value, options) {
|
||||
str = exports.toExponential(value, precision);
|
||||
}
|
||||
|
||||
/* TODO: cleanup
|
||||
// restore BigNumber configuration
|
||||
if (isBigNumber) {
|
||||
BigNumber.config({EXPONENTIAL_AT: oldScientific});
|
||||
}
|
||||
*/
|
||||
|
||||
// remove trailing zeros after the decimal point
|
||||
return str.replace(/((\.\d*?)(0+))($|e)/, function () {
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
var number = require('./number'),
|
||||
BigNumber = require('bignumber.js');
|
||||
BigNumber = require('../type/BigNumber');
|
||||
|
||||
/**
|
||||
* Test whether value is a String
|
||||
|
||||
@ -39,7 +39,7 @@
|
||||
"unit"
|
||||
],
|
||||
"dependencies": {
|
||||
"bignumber.js": "^1.3.0"
|
||||
"decimal.js": "^1.0.0"
|
||||
},
|
||||
"devDependencies": {
|
||||
"webpack": "latest",
|
||||
|
||||
@ -4,7 +4,7 @@ var assert = require('assert'),
|
||||
math = require('../../../index')(),
|
||||
bigmath = require('../../../index')({number: 'bignumber'}),
|
||||
Complex = require('../../../lib/type/Complex'),
|
||||
BigNumber = require('bignumber.js'),
|
||||
BigNumber = require('../../../lib/type/BigNumber'),
|
||||
Node = require('../../../lib/expression/node/Node'),
|
||||
ConstantNode = require('../../../lib/expression/node/ConstantNode'),
|
||||
SymbolNode = require('../../../lib/expression/node/SymbolNode');
|
||||
|
||||
@ -30,16 +30,16 @@ describe('ceil', function() {
|
||||
});
|
||||
|
||||
it('should return the ceil of a big number', function () {
|
||||
approx.deepEqual(ceil(bignumber(0)), bignumber(0));
|
||||
approx.deepEqual(ceil(bignumber(1)), bignumber(1));
|
||||
approx.deepEqual(ceil(bignumber(1.3)), bignumber(2));
|
||||
approx.deepEqual(ceil(bignumber(1.8)), bignumber(2));
|
||||
approx.deepEqual(ceil(bignumber(2)), bignumber(2));
|
||||
approx.deepEqual(ceil(bignumber(-1)), bignumber(-1));
|
||||
approx.deepEqual(ceil(bignumber(-1.3)), bignumber(-1));
|
||||
approx.deepEqual(ceil(bignumber(-1.8)), bignumber(-1));
|
||||
approx.deepEqual(ceil(bignumber(-2)), bignumber(-2));
|
||||
approx.deepEqual(ceil(bignumber(-2.1)), bignumber(-2));
|
||||
assert.deepEqual(ceil(bignumber(0)), bignumber(0));
|
||||
assert.deepEqual(ceil(bignumber(1)), bignumber(1));
|
||||
assert.deepEqual(ceil(bignumber(1.3)), bignumber(2));
|
||||
assert.deepEqual(ceil(bignumber(1.8)), bignumber(2));
|
||||
assert.deepEqual(ceil(bignumber(2)), bignumber(2));
|
||||
assert.deepEqual(ceil(bignumber(-1)), bignumber(-1));
|
||||
assert.deepEqual(ceil(bignumber(-1.3)), bignumber(-1));
|
||||
assert.deepEqual(ceil(bignumber(-1.8)), bignumber(-1));
|
||||
assert.deepEqual(ceil(bignumber(-2)), bignumber(-2));
|
||||
assert.deepEqual(ceil(bignumber(-2.1)), bignumber(-2));
|
||||
});
|
||||
|
||||
it('should return the ceil of real and imag part of a complex', function() {
|
||||
|
||||
@ -30,16 +30,16 @@ describe('fix', function() {
|
||||
});
|
||||
|
||||
it('should round big numbers correctly', function() {
|
||||
approx.deepEqual(fix(bignumber(0)), bignumber(0));
|
||||
approx.deepEqual(fix(bignumber(1)), bignumber(1));
|
||||
approx.deepEqual(fix(bignumber(1.3)), bignumber(1));
|
||||
approx.deepEqual(fix(bignumber(1.8)), bignumber(1));
|
||||
approx.deepEqual(fix(bignumber(2)), bignumber(2));
|
||||
approx.deepEqual(fix(bignumber(-1)), bignumber(-1));
|
||||
approx.deepEqual(fix(bignumber(-1.3)), bignumber(-1));
|
||||
approx.deepEqual(fix(bignumber(-1.8)), bignumber(-1));
|
||||
approx.deepEqual(fix(bignumber(-2)), bignumber(-2));
|
||||
approx.deepEqual(fix(bignumber(-2.1)), bignumber(-2));
|
||||
assert.deepEqual(fix(bignumber(0)), bignumber(0));
|
||||
assert.deepEqual(fix(bignumber(1)), bignumber(1));
|
||||
assert.deepEqual(fix(bignumber(1.3)), bignumber(1));
|
||||
assert.deepEqual(fix(bignumber(1.8)), bignumber(1));
|
||||
assert.deepEqual(fix(bignumber(2)), bignumber(2));
|
||||
assert.deepEqual(fix(bignumber(-1)), bignumber(-1));
|
||||
assert.deepEqual(fix(bignumber(-1.3)), bignumber(-1));
|
||||
assert.deepEqual(fix(bignumber(-1.8)), bignumber(-1));
|
||||
assert.deepEqual(fix(bignumber(-2)), bignumber(-2));
|
||||
assert.deepEqual(fix(bignumber(-2.1)), bignumber(-2));
|
||||
});
|
||||
|
||||
it('should round complex numbers correctly', function() {
|
||||
|
||||
@ -30,16 +30,16 @@ describe('floor', function() {
|
||||
});
|
||||
|
||||
it('should floor big numbers correctly', function() {
|
||||
approx.deepEqual(floor(bignumber(0)), bignumber(0));
|
||||
approx.deepEqual(floor(bignumber(1)), bignumber(1));
|
||||
approx.deepEqual(floor(bignumber(1.3)), bignumber(1));
|
||||
approx.deepEqual(floor(bignumber(1.8)), bignumber(1));
|
||||
approx.deepEqual(floor(bignumber(2)), bignumber(2));
|
||||
approx.deepEqual(floor(bignumber(-1)), bignumber(-1));
|
||||
approx.deepEqual(floor(bignumber(-1.3)), bignumber(-2));
|
||||
approx.deepEqual(floor(bignumber(-1.8)), bignumber(-2));
|
||||
approx.deepEqual(floor(bignumber(-2)), bignumber(-2));
|
||||
approx.deepEqual(floor(bignumber(-2.1)), bignumber(-3));
|
||||
assert.deepEqual(floor(bignumber(0)), bignumber(0));
|
||||
assert.deepEqual(floor(bignumber(1)), bignumber(1));
|
||||
assert.deepEqual(floor(bignumber(1.3)), bignumber(1));
|
||||
assert.deepEqual(floor(bignumber(1.8)), bignumber(1));
|
||||
assert.deepEqual(floor(bignumber(2)), bignumber(2));
|
||||
assert.deepEqual(floor(bignumber(-1)), bignumber(-1));
|
||||
assert.deepEqual(floor(bignumber(-1.3)), bignumber(-2));
|
||||
assert.deepEqual(floor(bignumber(-1.8)), bignumber(-2));
|
||||
assert.deepEqual(floor(bignumber(-2)), bignumber(-2));
|
||||
assert.deepEqual(floor(bignumber(-2.1)), bignumber(-3));
|
||||
});
|
||||
|
||||
it('should floor complex numbers correctly', function() {
|
||||
|
||||
@ -1,5 +1,5 @@
|
||||
var assert = require('assert'),
|
||||
BigNumber = require('bignumber.js'),
|
||||
BigNumber = require('../../../lib/type/BigNumber'),
|
||||
mathjs = require('../../../index'),
|
||||
math = mathjs(),
|
||||
bignumber = math.bignumber;
|
||||
|
||||
@ -1,6 +1,7 @@
|
||||
// test format
|
||||
var assert = require('assert'),
|
||||
math = require('../../../index')();
|
||||
mathjs = require('../../../index');
|
||||
math = mathjs();
|
||||
|
||||
describe('format', function() {
|
||||
|
||||
@ -60,9 +61,7 @@ describe('format', function() {
|
||||
});
|
||||
|
||||
describe('bignumber', function () {
|
||||
before (function () {
|
||||
math.type.BigNumber.config(20); // ensure the precision is 20 digits, the default
|
||||
});
|
||||
var math = mathjs({decimals: 20}); // ensure the precision is 20 digits, the default
|
||||
|
||||
it('should format big numbers', function() {
|
||||
assert.equal(math.format(math.bignumber(2).dividedBy(7)), '0.28571428571428571429');
|
||||
|
||||
@ -1,7 +1,7 @@
|
||||
// test number utils
|
||||
var assert = require('assert'),
|
||||
approx = require('../../tools/approx'),
|
||||
BigNumber = require('bignumber.js'),
|
||||
BigNumber = require('../../lib/type/BigNumber'),
|
||||
number = require('../../lib/util/number');
|
||||
|
||||
describe('number', function() {
|
||||
@ -75,18 +75,15 @@ describe('number', function() {
|
||||
});
|
||||
|
||||
it('should format a bignumber using toFixed', function() {
|
||||
var DECIMAL_PLACES = BigNumber.config().DECIMAL_PLACES;
|
||||
BigNumber.config(100);
|
||||
var Big = BigNumber.constructor();
|
||||
Big.config({decimals: 100});
|
||||
|
||||
assert.equal(number.toFixed(new BigNumber(2.34)), '2');
|
||||
assert.equal(number.toFixed(new BigNumber(2.34), 1), '2.3');
|
||||
assert.equal(number.toFixed(new BigNumber(2), 20), '2.00000000000000000000');
|
||||
assert.equal(number.toFixed(new BigNumber(2), 21), '2.000000000000000000000');
|
||||
assert.equal(number.toFixed(new BigNumber(2), 22), '2.0000000000000000000000');
|
||||
assert.equal(number.toFixed(new BigNumber(2), 30), '2.000000000000000000000000000000');
|
||||
|
||||
// restore global bignumber configuration
|
||||
BigNumber.config(DECIMAL_PLACES);
|
||||
assert.equal(number.toFixed(new Big(2.34)), '2');
|
||||
assert.equal(number.toFixed(new Big(2.34), 1), '2.3');
|
||||
assert.equal(number.toFixed(new Big(2), 20), '2.00000000000000000000');
|
||||
assert.equal(number.toFixed(new Big(2), 21), '2.000000000000000000000');
|
||||
assert.equal(number.toFixed(new Big(2), 22), '2.0000000000000000000000');
|
||||
assert.equal(number.toFixed(new Big(2), 30), '2.000000000000000000000000000000');
|
||||
});
|
||||
|
||||
it('should format a number using toExponential', function() {
|
||||
@ -101,22 +98,19 @@ describe('number', function() {
|
||||
});
|
||||
|
||||
it('should format a bignumber using toExponential', function() {
|
||||
var DECIMAL_PLACES = BigNumber.config().DECIMAL_PLACES;
|
||||
BigNumber.config(100);
|
||||
var Big = BigNumber.constructor();
|
||||
Big.config({decimals: 100});
|
||||
|
||||
assert.equal(number.toExponential(new BigNumber(2.34)), '2.34e+0');
|
||||
assert.equal(number.toExponential(new BigNumber(2.34e+3)), '2.34e+3');
|
||||
assert.equal(number.toExponential(new BigNumber(2.34e-3)), '2.34e-3');
|
||||
assert.equal(number.toExponential(new BigNumber(2.34e+3), 2), '2.3e+3');
|
||||
assert.equal(number.toExponential(new BigNumber(2e+3), 20), '2.0000000000000000000e+3');
|
||||
assert.equal(number.toExponential(new BigNumber(2e+3), 21), '2.00000000000000000000e+3');
|
||||
assert.equal(number.toExponential(new BigNumber(2e+3), 22), '2.000000000000000000000e+3');
|
||||
assert.equal(number.toExponential(new BigNumber(2e+3), 30), '2.00000000000000000000000000000e+3');
|
||||
assert.equal(number.toExponential(new BigNumber('2e+300'), 30), '2.00000000000000000000000000000e+300');
|
||||
assert.equal(number.toExponential(new BigNumber('2e-300'), 30), '2.00000000000000000000000000000e-300');
|
||||
|
||||
// restore global bignumber configuration
|
||||
BigNumber.config(DECIMAL_PLACES);
|
||||
assert.equal(number.toExponential(new Big(2.34)), '2.34e+0');
|
||||
assert.equal(number.toExponential(new Big(2.34e+3)), '2.34e+3');
|
||||
assert.equal(number.toExponential(new Big(2.34e-3)), '2.34e-3');
|
||||
assert.equal(number.toExponential(new Big(2.34e+3), 2), '2.3e+3');
|
||||
assert.equal(number.toExponential(new Big(2e+3), 20), '2.0000000000000000000e+3');
|
||||
assert.equal(number.toExponential(new Big(2e+3), 21), '2.00000000000000000000e+3');
|
||||
assert.equal(number.toExponential(new Big(2e+3), 22), '2.000000000000000000000e+3');
|
||||
assert.equal(number.toExponential(new Big(2e+3), 30), '2.00000000000000000000000000000e+3');
|
||||
assert.equal(number.toExponential(new Big('2e+300'), 30), '2.00000000000000000000000000000e+300');
|
||||
assert.equal(number.toExponential(new Big('2e-300'), 30), '2.00000000000000000000000000000e-300');
|
||||
});
|
||||
|
||||
it('should convert a number into a bignumber (when possible)', function() {
|
||||
@ -334,39 +328,42 @@ describe('number', function() {
|
||||
});
|
||||
|
||||
describe('bignumber', function () {
|
||||
var B = null;
|
||||
|
||||
before (function () {
|
||||
BigNumber.config(20); // ensure the precision is 20 digits, the default
|
||||
B = BigNumber.constructor();
|
||||
B.config({precision: 20}); // ensure the precision is 20 digits, the default
|
||||
});
|
||||
|
||||
it('should format big numbers', function() {
|
||||
assert.deepEqual(number.format(new BigNumber('2.3')), '2.3');
|
||||
assert.deepEqual(number.format(new BigNumber('0.00000003')), '3e-8');
|
||||
assert.deepEqual(number.format(new BigNumber('12345678')), '1.2345678e+7');
|
||||
assert.deepEqual(number.format(new B('2.3')), '2.3');
|
||||
assert.deepEqual(number.format(new B('0.00000003')), '3e-8');
|
||||
assert.deepEqual(number.format(new B('12345678')), '1.2345678e+7');
|
||||
});
|
||||
|
||||
it('should format big numbers with given precision', function() {
|
||||
assert.deepEqual(number.format(new BigNumber('1.23456'), 3), '1.23');
|
||||
assert.deepEqual(number.format(new BigNumber('12345678'), 4), '1.235e+7');
|
||||
assert.deepEqual(number.format(new B('1.23456'), 3), '1.23');
|
||||
assert.deepEqual(number.format(new B('12345678'), 4), '1.235e+7');
|
||||
});
|
||||
|
||||
it('should format big numbers in exponential notation', function() {
|
||||
var options = {
|
||||
notation: 'exponential'
|
||||
};
|
||||
assert.deepEqual(number.format(new BigNumber('1.23456'), options), '1.23456e+0');
|
||||
assert.deepEqual(number.format(new BigNumber('12345678'), options), '1.2345678e+7');
|
||||
assert.deepEqual(number.format(new BigNumber('2.3e+30'), options), '2.3e+30');
|
||||
assert.deepEqual(number.format(new BigNumber('0.23e+30'), options), '2.3e+29');
|
||||
assert.deepEqual(number.format(new BigNumber('2.3e-30'), options), '2.3e-30');
|
||||
assert.deepEqual(number.format(new BigNumber('0.23e-30'), options), '2.3e-31');
|
||||
assert.deepEqual(number.format(new B('1.23456'), options), '1.23456e+0');
|
||||
assert.deepEqual(number.format(new B('12345678'), options), '1.2345678e+7');
|
||||
assert.deepEqual(number.format(new B('2.3e+30'), options), '2.3e+30');
|
||||
assert.deepEqual(number.format(new B('0.23e+30'), options), '2.3e+29');
|
||||
assert.deepEqual(number.format(new B('2.3e-30'), options), '2.3e-30');
|
||||
assert.deepEqual(number.format(new B('0.23e-30'), options), '2.3e-31');
|
||||
|
||||
options.precision = 18;
|
||||
assert.deepEqual(number.format(new BigNumber(1).div(3), options), '3.33333333333333333e-1');
|
||||
assert.deepEqual(number.format(new B(1).div(3), options), '3.33333333333333333e-1');
|
||||
});
|
||||
|
||||
it.skip('sould format big numbers with custom precision, lower, and upper bound', function() {
|
||||
var oldPrecision = BigNumber.config().DECIMAL_PLACES;
|
||||
BigNumber.config({DECIMAL_PLACES: 100});
|
||||
it('should format big numbers with custom precision, lower, and upper bound', function() {
|
||||
var Big = BigNumber.constructor();
|
||||
Big.config({precision: 100});
|
||||
|
||||
var options = {
|
||||
notation: 'auto',
|
||||
@ -377,16 +374,13 @@ describe('number', function() {
|
||||
}
|
||||
};
|
||||
|
||||
assert.deepEqual(number.format(new BigNumber(5).div(3), options), '1.6666666666666666666666666666666666666666666666667');
|
||||
assert.deepEqual(number.format(new BigNumber(5e+40).div(3), options), '16666666666666666666666666666666666666666.666666667');
|
||||
assert.deepEqual(number.format(new BigNumber(5e-40).div(3), options),
|
||||
assert.deepEqual(number.format(new Big(5).div(3), options), '1.6666666666666666666666666666666666666666666666667');
|
||||
assert.deepEqual(number.format(new Big(5e+40).div(3), options), '16666666666666666666666666666666666666666.666666667');
|
||||
assert.deepEqual(number.format(new Big(5e-40).div(3), options),
|
||||
'0.00000000000000000000000000000000000000016666666666666666666666666666666666666666666666667');
|
||||
assert.deepEqual(number.format(new BigNumber(5e+60).div(3), options), '1.6666666666666666666666666666666666666666666666667e+60');
|
||||
assert.deepEqual(number.format(new BigNumber(5e-60).div(3), options), '1.6666666666666666666666666666666666666666666666667e-60');
|
||||
assert.deepEqual(number.format(new BigNumber(5e-80).div(3), options), '1.6666666666666666666666666666666666666666666666667e-80');
|
||||
|
||||
// restore old precision
|
||||
BigNumber.config({DECIMAL_PLACES: oldPrecision});
|
||||
assert.deepEqual(number.format(new Big(5e+60).div(3), options), '1.6666666666666666666666666666666666666666666666667e+60');
|
||||
assert.deepEqual(number.format(new Big(5e-60).div(3), options), '1.6666666666666666666666666666666666666666666666667e-60');
|
||||
assert.deepEqual(number.format(new Big(5e-80).div(3), options), '1.6666666666666666666666666666666666666666666666667e-80');
|
||||
});
|
||||
|
||||
it('should format big numbers in fixed notation', function() {
|
||||
|
||||
Loading…
x
Reference in New Issue
Block a user