A library for arbitrary precision decimal floating point arithmetic that can exactly represent all decimal fractions, unlike JavaScript's number data type which is 64-bit binary floating point.
Based on the original work by Douglas Crockford. This implementation is built upon the Google Chrome Labs' implementation of ECMAScript big integers: JSBI.
This library provides three ways to make bigfloat operations:
- A set of functions for a functional style approach
- A BigFloat class with an API similar to that of Decimal.js
- An evaluate() function that parses and resolves an expression
NOTE: This is a compatibility package intended for cross-browser support. If you are targetting Node.js, Electron or any engine that supports native bigints and the exponentiation operator(**), then you don't need JSBI and you should be using bigfloat-esnext.
Basic usage
Functional style
; stringsqrtmake"2"; // 1.4142
Class based
; new BigFloat"2".sqrt.toString; // 1.4142
The evaluate() function
evaluateexpression: string, precision?: number: string | boolean
The first argument can be any valid arithmetic or relational expression, including scientific e-notation. (Optional) Precision should be a negative integer. Default is -4.
; 01 + 02 === 03; // falseevaluate"0.1 + 0.2 == 0.3"; // true 01 + 02; // 0.30000000000000004evaluate"0.1 + 0.2"; // "0.3" 1 + Number.EPSILON / 2; // 1evaluate`1 + `; // "1.00000000000000011102230246251565" evaluate"1 + 2.220446049250313e-16"; // "1.0000000000000002220446049250313" evaluate`4 >= `; // true
Valid tokens:
- Parenthesis: (,)
- Number: Decimal, integer or scientific e-notation
- Operator: Arithmetic +,-,/,*,** Relational ===,==,!==,!=,<,>,<=,>=
Change precision
; new BigFloat2.sqrt.toString; // 1.4142set_precision-10;new BigFloat2.sqrt.toString; // 1.4142135623
The bigfloat object
Valid bigfloat made from primitives:
coefficient: JSBI.BigInt522299, exponent: -4};