Abstraction for decimal functionality in big.js, bignumber.js, decimal.js and others via adapters.
npm i arbitrary-precision
- [adapter] [lib] big.js
- [adapter] [lib] bignumber.js
- [adapter] [lib] decimal.js
- [adapter] [lib] floating
See up to date list.
var decimalFactory = require('arbitrary-precision');
var adapter = require('floating-adapter'); // See adapters section for full list
var Decimal = decimalFactory(adapter);
new Decimal('0.1').plus(new Decimal('0.2')).valueOf(); // => 0.1 + 0.3
new Decimal('0.3').minus(new Decimal('0.1')).valueOf(); // => 0.3 - 0.1
new Decimal('0.6').times(new Decimal('3')).valueOf(); // => 0.6 * 3
new Decimal('0.3').div(new Decimal('0.2')).valueOf(); // => 0.3 / 0.2
new Decimal('2').pow(new Decimal('3')).valueOf(); // => 8
new Decimal('9').sqrt().valueOf(); // => 3
new Decimal('2').equals(new Decimal('2')); // => true
new Decimal('2').equals(new Decimal('3')); // => false
new Decimal('2').lt(new Decimal('3')); // => true (other: lte, gt, gte)
new Decimal('2').cmp(new Decimal('3')); // => -1
var decimalThird = new Decimal('1').div(new Decimal('3'));
// with bigjs-adapter (other adapters might have differing implementations)
decimalThird.toString() === decimalThird.valueOf() === decimalThird.toJSON(); // => true
Number(decimalThird); // => 1/3
var Decimal40 = decimalFactory(adapter);
Decimal40.setPrecision(40);
var decimalThird = new Decimal40('1').div(new Decimal('3'));
var stringified = JSON.stringify(decimalThird);
// => '"0.3333333333333333333333333333333333333333"'
JSON.parse(stringified, Decimal40.reviver);
// => new Decimal40('0.3333333333333333333333333333333333333333')
See spec.