Arbitrary-length arithmetics API based on locutus/php/bcmath
bcmath
=======



Arbitrary-length arithmetics without hassle.
bcmath package is a robust solution for calculations when precision is key.
- No to floating-point numbers.
- No to length/precision limits
- Yes to an API that makes sense.
import {Bcmath} from 'bcmath'// Spawn a bcmath instance with a precision of 20 decimal places
const math = Bcmath(20)
console.log(0.1 + 0.2 + 0.3)
// 0.6000000000000001 :-(
console.log(math.chain(0.1).add(0.2).add(0.3).done())
// 0.6 :-)
console.log(math.eval('x ^ (y + 5)', {x: 2, y: 3}))
// 256
console.log(math.pow(2, 4096).length)
// 1234
const n = math.chain(0.15, 50).pow(-10)
console.log(n.done())
// 173415299.15832613592101475046148114277972531287574726074779
console.log(n.round(3).done())
//173415299.158
console.log(n.round(-3).done())
//173415000
console.log(math.max(1, 2, 3.62, 3.61))
// 3.62
console.log(math.pi(50))
// 3.14159265358979323846264338327950288419716939937510
console.log(math.sqrt(2))
// 1.41421568627450980392
`API
$3
#### Bcmath(scale)
Get a BcmathClass instance
##### Parameters
| Name | Type | Description | |
| ---- | ---- | ----------- | -------- |
| scale |
int | Decimal places | |
##### Returns
-
BcmathClass #### new BcmathClass()
Bcmath
##### Returns
-
Void#### BcmathClass.constructor(scale)
Constructor
##### Parameters
| Name | Type | Description | |
| ---- | ---- | ----------- | -------- |
| scale |
int | Decimal places | |
##### Returns
-
Void#### BcmathClass.chain(number, scale)
Returns Chain object
##### Parameters
| Name | Type | Description | |
| ---- | ---- | ----------- | -------- |
| number |
string number BigInt | Number to start with | |
| scale | int | Number of decimal places | |
##### Returns
-
Chain #### BcmathClass.compare(left, right)
Returns:
-1 if left is lesser than right
0 if left is equal to right
1 if left is greater than right
##### Parameters
| Name | Type | Description | |
| ---- | ---- | ----------- | -------- |
| left |
string number BigInt | Left operand | |
| right | string number BigInt | Right operand | |
##### Returns
-
int #### BcmathClass.pow(number, power)
Number to be raised to a power
##### Parameters
| Name | Type | Description | |
| ---- | ---- | ----------- | -------- |
| number |
string number BigInt | Number | |
| power | int | Power | |
##### Returns
-
number #### BcmathClass.avg(numbers)
##### Parameters
| Name | Type | Description | |
| ---- | ---- | ----------- | -------- |
| numbers | | | |
##### Returns
-
string #### BcmathClass.round(number, precision)
Round the number to the nearest round number
##### Parameters
| Name | Type | Description | |
| ---- | ---- | ----------- | -------- |
| number |
string number BigInt | Number | |
| precision | | Number of decimal places. Can be negative. Default: 0 | |
##### Returns
-
string #### BcmathClass.abs(number)
Returns the absolute value of the specified number
##### Parameters
| Name | Type | Description | |
| ---- | ---- | ----------- | -------- |
| number |
string number BigInt | | |
##### Returns
-
string #### BcmathClass.floor(number, precision)
Round the number down
##### Parameters
| Name | Type | Description | |
| ---- | ---- | ----------- | -------- |
| number |
string number BigInt | Subject number | |
| precision | | Number of decimal places. Can be negative. Default: 0 | |
##### Returns
-
string #### BcmathClass.ceil(number, precision)
Round the number up
##### Parameters
| Name | Type | Description | |
| ---- | ---- | ----------- | -------- |
| number |
string number BigInt | Subject number | |
| precision | int | Number of decimal places. Can be negative. Default: 0 | |
##### Returns
-
string #### BcmathClass.mul(number, multiplier, scale)
Multiply
##### Parameters
| Name | Type | Description | |
| ---- | ---- | ----------- | -------- |
| number |
string number BigInt | | |
| multiplier | string number BigInt | | |
| scale | int | Number of decimal places | |
##### Returns
-
string #### BcmathClass.div(number, divisor, scale)
Divide
##### Parameters
| Name | Type | Description | |
| ---- | ---- | ----------- | -------- |
| number |
string number BigInt | Number | |
| divisor | string number BigInt | Divisor | |
| scale | int | Number of decimal places | |
##### Returns
-
string #### BcmathClass.add(left, right, scale)
Add two numbers
##### Parameters
| Name | Type | Description | |
| ---- | ---- | ----------- | -------- |
| left |
string number BigInt | Left operand | |
| right | string number BigInt | Right operand | |
| scale | int | Number of decimal places | |
##### Returns
-
string #### BcmathClass.mod(number, divisor)
Get the modulus
##### Parameters
| Name | Type | Description | |
| ---- | ---- | ----------- | -------- |
| number |
string number BigInt | Number | |
| divisor | | Divisor | |
##### Returns
-
string #### BcmathClass.sub(left, right, scale)
Substract right from left
##### Parameters
| Name | Type | Description | |
| ---- | ---- | ----------- | -------- |
| left | | Left operand | |
| right | | Right operand | |
| scale |
int | Number of decimal places | |
##### Returns
-
string #### BcmathClass.max(scale)
Returns the highest number
##### Parameters
| Name | Type | Description | |
| ---- | ---- | ----------- | -------- |
| ...numbers | | Array of numbers | |
| scale |
int | Number of decimal places | |
##### Returns
-
string #### BcmathClass.min(scale)
Returns the lowest number
##### Parameters
| Name | Type | Description | |
| ---- | ---- | ----------- | -------- |
| ...numbers | | Array of numbers | |
| scale |
int | Number of decimal places | |
##### Returns
-
string #### BcmathClass.isBigInt(number)
Check if the number fits in a signed BigInt
##### Parameters
| Name | Type | Description | |
| ---- | ---- | ----------- | -------- |
| number |
string number BigInt | Number | |
##### Returns
-
boolean #### BcmathClass.isSafeBigInt(number)
Check if the number is safe to use in Javascript BigInt
##### Parameters
| Name | Type | Description | |
| ---- | ---- | ----------- | -------- |
| number |
string number BigInt | Number | |
##### Returns
-
boolean #### BcmathClass.*generateDigitsOfPi()
##### Returns
-
Generator.<number> #### BcmathClass.pi(scale)
Get π
##### Parameters
| Name | Type | Description | |
| ---- | ---- | ----------- | -------- |
| scale |
int | Number of decimal places | |
##### Returns
-
string #### BcmathClass.piFormatted(scale)
π in a formatted string, up to 50 digits per line
##### Parameters
| Name | Type | Description | |
| ---- | ---- | ----------- | -------- |
| scale |
int | Number of decimal places | |
##### Returns
-
string #### BcmathClass.sqrt(number, scale)
Calculate square root
##### Parameters
| Name | Type | Description | |
| ---- | ---- | ----------- | -------- |
| number |
string number BigInt | | |
| scale | int | | |
##### Returns
-
string #### BcmathClass.neg(number)
Multiply by -1
##### Parameters
| Name | Type | Description | |
| ---- | ---- | ----------- | -------- |
| number |
string number BigInt | Number | |
##### Returns
-
Void#### BcmathClass.eval(expr, variables)
Evaluate an expression
##### Parameters
| Name | Type | Description | |
| ---- | ---- | ----------- | -------- |
| expr |
string | Expression, e.g 'x + y' | |
| variables | object | | |
##### Returns
-
Void#### BcmathClass.parse(expr)
##### Parameters
| Name | Type | Description | |
| ---- | ---- | ----------- | -------- |
| expr | | | |
##### Returns
-
function(): #### trimZeroes(value)
Trims empty decimal places
##### Parameters
| Name | Type | Description | |
| ---- | ---- | ----------- | -------- |
| value | | | |
##### Returns
-
string
$3
#### Chain.constructor(number, scale)
Constructor
##### Parameters
| Name | Type | Description | |
| ---- | ---- | ----------- | -------- |
| number |
string number BigInt | Number | |
| scale | int | Number of decimal places (default: 10) | |
##### Returns
-
Void#### Chain.toJSON()
toJSON
##### Returns
-
string #### Chain.scale(scale)
Set the scale of operations
##### Parameters
| Name | Type | Description | |
| ---- | ---- | ----------- | -------- |
| scale |
int | Number of decimal places | |
##### Returns
-
Chain #### Chain.compare(left, right)
Returns:
-1 if current value is lesser than the number
0 if left is equal to the number
1 if left is greater than the number
##### Parameters
| Name | Type | Description | |
| ---- | ---- | ----------- | -------- |
| left | | Left operand | |
| right | | Right operand | |
##### Returns
-
int #### Chain.round(precision)
Round value to the nearest round number
##### Parameters
| Name | Type | Description | |
| ---- | ---- | ----------- | -------- |
| precision | | Number of decimal places. Can be negative. Default: 0 | |
##### Returns
-
Chain #### Chain.floor(precision)
Round the number down
##### Parameters
| Name | Type | Description | |
| ---- | ---- | ----------- | -------- |
| precision | | Number of decimal places. Can be negative. Default: 0 | |
##### Returns
-
Chain #### Chain.ceil(precision)
Round the number up
##### Parameters
| Name | Type | Description | |
| ---- | ---- | ----------- | -------- |
| precision | | Number of decimal places. Can be negative. Default: 0 | |
##### Returns
-
Chain #### Chain.pow(power)
Pow
##### Parameters
| Name | Type | Description | |
| ---- | ---- | ----------- | -------- |
| power | | | |
##### Returns
-
Chain #### Chain.mul(value)
Multiply
##### Parameters
| Name | Type | Description | |
| ---- | ---- | ----------- | -------- |
| value | | | |
##### Returns
-
Chain #### Chain.div(divisor)
Divide value by a divisor
##### Parameters
| Name | Type | Description | |
| ---- | ---- | ----------- | -------- |
| divisor | | Divisor | |
##### Returns
-
Chain #### Chain.sub(number)
Substract a number
##### Parameters
| Name | Type | Description | |
| ---- | ---- | ----------- | -------- |
| number |
string number BigInt | Number to add | |
##### Returns
-
Chain #### Chain.add(value)
Add a number
##### Parameters
| Name | Type | Description | |
| ---- | ---- | ----------- | -------- |
| value | | | |
##### Returns
-
Chain #### Chain.max(numbers)
Returns the highest number
##### Parameters
| Name | Type | Description | |
| ---- | ---- | ----------- | -------- |
| numbers |
string number BigInt | Array of numbers | |
##### Returns
-
Chain #### Chain.min(numbers)
Returns the lowest number
##### Parameters
| Name | Type | Description | |
| ---- | ---- | ----------- | -------- |
| numbers |
string number BigInt | Array of numbers | |
##### Returns
-
Chain #### Chain.abs()
Returns the absolute value of the specified number
##### Returns
-
Chain #### Chain.done(plus)
Return the final value of the chain
##### Parameters
| Name | Type | Description | |
| ---- | ---- | ----------- | -------- |
| plus | | If true, positive number will be prepended by + sign. Default: false | |
##### Returns
-
string` #### Chain.raw()
Get the raw value
##### Returns
-
Documentation generated with doxdox.
GitHub: https://github.com/kakserpom/bcmath.js