fixed-point
v0.8.0
Published
Fixed point arithmetic with BigInt. Can be used for money or scientific calculations with known precision.
Downloads
8
Maintainers
Readme
🗿 fixed-point
Fixed point arithmetic with BigInt. Minimalistic library that can be used for money or scientific calculations with known precision.
Examples
Install package npm install fixed-point
or include minified script on page.
import { FixedPoint } from 'fixed-point';
// Simple example: 0.3 - 0.2 = 0.1
console.log(new FixedPoint(0.3).sub(0.2).toString());
// Price with 30% discount, rounding benefiting the customer
FixedPoint.setRounding('floor');
console.log(new FixedPoint('99.95').mul(0.70).toFixed())
// Bitcoin fee with banker rounding: 1.0 BTC - 0.00005 BTC = 0.99995000 BTC
FixedPoint.setRounding('even');
FixedPoint.setPrecision(8);
console.log(new FixedPoint('1').sub('0.00005').toFixed() + ' BTC');
// Rounding mode for fast calculations
FixedPoint.setRounding('trunc');
FixedPoint.setPrecision(15);
console.log(new FixedPoint('3.14159265358979').mul('2'));
API
new FixedPoint(string)
- constructor from Stringnew FixedPoint(number)
- constructor from Numbera.toString()
- conversion to Stringa.toFixed()
- conversion to StringFixedPoint.setPrecision(number)
- set precision (2 decimal places is default)FixedPoint.setRounding(string)
- set rounding ('trunc'|'floor'|'ceil'|'even'), 'even' is defaulta.add(b)
- addition (exact)a.sub(b)
- subtraction (exact)a.mul(b)
- multiplication (rounded)a.div(b)
- division (rounded)a.eq(b)
-a == b
a.ne(b)
-a != b
a.gt(b)
-a > b
a.ge(b)
-a >= b
a.lt(b)
-a < b
a.le(b)
-a <= b
Status: alpha.
2do
- [x] constructors, toString/toFixed
- [x] operations: +|-|*|/
- [x] 4 rounding modes from IEEE 754-1985: RN, RZ, RU, RD
- [x] testing rounding modes with table
- [x] get feedback
- [ ] add benchmark
- [ ] add precision conversion: x.xxxxxxxx BTC in xx.xx $
- [ ] add build with BigInt polyfill