precise-calculator
v3.0.7
Published
Financial precise calculator
Maintainers
Readme
precise-calculator
Precise Calculator
Usage
Install globally to use repl
npm install -g precise-calculator$ pcalc
$C> 1 + 1
2Or install in project to use api
const $C = require('precise-calculator')
// (1 + 1) * 1 / 1 - 1
$C(1).add(1).mul(1).div(1).sub(1).v()API
Calculator
const $C = require('precise-calculator')
$C(1)
$C('1')
new $C.Calculator(1)
new $C.Calculator('1')add(n)/$add(c)
Arithmetic operator +.
$C(1).add(1)
$C(1).add('1')
$C('1').$add($C(1))sub(n)/$sub(c)
Arithmetic operator -.
$C(1).sub(1)
$C(1).sub('1')
$C('1').$sub($C(1))mul(n)/$mul(c)
Arithmetic operator *.
$C(1).mul(1)
$C(1).mul('1')
$C('1').$mul($C(1))div(n)/$div(c)
Arithmetic operator /.
$C(1).div(1)
$C(1).div('1')
$C('1').$div($C(1))round(precision)/rv(precision)
Use default rounding method to round and return the value with special precision.
Default rounding method is round-half-up, which can be changed by setup()
$C(3.141).round(2) // 3.14
$C(3.145).rv(2) // 3.15upRound(precision)/uv(precision)
Use round-half-up to round and return the value with special precision.
$C(3.141).upRound(2) // 3.14
$C(3.145).uv(2) // 3.15evenRound(precision)/ev(precision)
Use round-half-even to round and return the value with special precision.
$C(3.145).evenRound(2) // 3.14
$C(3.155).ev(2) // 3.16ceil(precision)/cv(precision)
Ceil and return the value with special precision.
$C(3.141).ceil(2) // 3.15
$C(3.155).cv(2) // 3.16floor(precision)/fv(precision)
Floor and return the value with special precision.
$C(3.146).floor(2) // 3.14
$C(3.151).fv(2) // 3.15r(precision)/ru(precision)/re(precision)/rc(precision)/rf(precision)
Use rounding method to round and return itself, usually in the middle of calculations
$C(1).div(8).r(2).mul(5).v() // 0.65
$C(1).div(8).ru(2).mul(5).v() // 0.65
$C(1).div(8).re(2).mul(5).v() // 0.6
$C(1).div(8).rc(2).mul(5).v() // 0.65
$C(1).div(8).rf(2).mul(5).v() // 0.6ruse default rounding methodruuse round-half-up rounding methodreuse round-half-even rounding methodrcuse ceil rounding methodrfuse floor rounding method
format(fmt='#,##0.00', prefix='', suffix='')/fmt(fmt='#,##0.00', prefix='', suffix='')
Format the value with special formatter. format only, no round, if you want round please round before format.
$C(1234.1).format('#,##0.00') // 1,234.10
$C(1234.1).format('#,##0.00', '$') // $1,234.10
$C(12.3).format('#,##0.00', '', '%') // 12.30%thousands(precision=2)
Format use thousands sperator.
$C(1234.1).format('#,##0.00') // 1,234.10
$C(1234.1).format('#,##0.00', '$') // $1,234.10
$C(12.3).format('#,##0.00', '', '%') // 12.30%currency(currency, positiveSign=false)
Format use thousands sperator and with prefix currency.
signed(prefix='', precision = 2)
Force sign even for positive numbers.
unsigned(prefix='', precision = 2)
Force unsign even for negative numbers.
v()/value()
Return the number value of current result.
$C(1).add(2).v() // number value `3`
$C(1).add(2).value() // number value `3`vs()
Return the string value of current result.
$C(1).add(2).vs() // string value `3`ve()
Return the scientific notation value of current result.
$C(10).mul(100).ve() // string value `1e+3`compile(expr, ...args)/ccompile(expr, ...args)/cc(expr, ...args)/ocompile(expr)/oc(expr)
Compile the arithmetic expression to corresponding function. There must be spaces before and after the operator in the expression.
ccompile()/cc() compiled and cached the compilation result for reuse.
ocompile()/oc() compiled as a function with a object argument and cached the compilation result for reuse.
$C.compile('1 +1') // invalid expression
$C.compile('1+1') // invalid expression
const formula1 = $C.compile('1 + 1') // valid expression
const formula2 = $C.ccompile('(x + y) * z', 'x', 'y', 'z') // valid expression
const formula3 = $C.ocompile('(x + y) * z') // valid expression
// Execute formula
console.log(formula1()) // 2
console.log(formula2(1, 2, 3)) // 9
console.log(formula3({x: 1, y: 2, z: 3})) // 9More settings can be set in curly braces after all parentheses. Such as, rounding, formatting, etc.
const d = {x:1.23, y:1.224, z:3}
$C.compile('((d.x + d.y) * d.z)', 'd')(d) // 7.362
$C.compile('((d.x + d.y) * d.z){.2R}', 'd')(d) // 7.36
$C.compile('((d.x + d.y){.2R} * d.z)', 'd')(d) // 7.35
$C.compile('((d.x + d.y){.2R} * d.z){.1R}', 'd')(d) // 7.4Functions supportted in expression
Built-in functions
max(x, y, ..., z)Returns max value of argumentsmin(x, y, ..., z)Returns min value of argumentspow(x, y)Returns the value of a base expression taken to a specified powerabs(x)Returns the absolute value of a number
$C.compile('1 + pow(3, 2)') // 10
$C.compile('1 + max(3, 2)') // 4
$C.compile('1 + min(3, 2)') // 3Extend functions, should define a pair of functions, name() and $name().
The arguments and return values of functions that start with $ are instances of Calculator
$C.square = (x)=>Math.pow(x,2)
$C.$square = ($x)=>$C(Math.pow($x,2))
1 + square(2) // 5
1 + square(1 + 1) // 5Expression settings
Settings arguments{[prefix][format][mode][suffix]}
prefixused informat()asprefixargument, supports$¥formatused informat(), and rouding methods if there is any roundingmode. Supports two formats, standard format(#,##0,#,##0.00,.00) and digital mode(3,3.2,.2)moderounding mode:Ruse default rounding method,(1.123){.2R}means$C(1.123).r(2).v()Uuse round-half-up method,(1.123){.2U}means$C(1.123).ru(2).v()Euse round-half-even method,(1.123){.2E}means$C(1.123).re(2).v()Cuse round-ceil method,(1.123){.2C}means$C(1.123).rc(2).v()Fuse round-floor method,(1.123){.2F}means$C(1.123).rf(2).v()S/sspecify the result to return a string, and can be used with rounding mode,(1.123){S}means$C(1.123).vs(),(1.123){.2Rs}means$C(1.123).r(2).vs()especify the result to return a scientific,(1.123){e}means$C(1.123).ve()Pspecify the result as a percentage with the suffix%,(1.123){.P}means$C(1.123).mul(100).format('.','','%')
suffixused informat()assuffixargument, supports%
Special format
- Support front currency, for example
$C.ocompile('$(1.1 + 1.2)') // $2.3
$C.ocompile('¥(1.1 + 1.2)') // ¥2.3- Support function alias, for example
(...).round(2)
$C.ocompile('(1.1 + 1.2).round(2)') // $C(1.1).add(1.2).r(2).v()
$C.ocompile('(1.1 + 1.2).upRound(2)') // $C(1.1).add(1.2).ru(2).v()
$C.ocompile('(1.1 + 1.2).evenRound(2)') // $C(1.1).add(1.2).re(2).v()
$C.ocompile('(1.1 + 1.2).ceil(2)') // $C(1.1).add(1.2).rc(2).v()
$C.ocompile('(1.1 + 1.2).floor(2)') // $C(1.1).add(1.2).rf(2).v()$compile(expr, ...args)/$ccompile(expr, ...args)/$cc(expr, ...args)/$ocompile(expr)/$oc(expr)
Compile the arithmetic expression to corresponding function, which the function's result is Calculator. Used to calculate intermediate results, so formatting cannot be used.
const fn = $C.$ocompile('((x + y) * z){.2R}') // $(x).add(y).mul(z).r(2)
const result = fn({x: 1, y: 2, z: 3}) // result is instanceof Calculator
result.format('#,##0.00') // 9.00
result.format('#,##0.0', '$') // $9.0eval(expr, ...args)
Calculate the value of the expression. First half of the args is the name, and the second half is the value.
$C.eval('x + y', 'x', 'y', 1, 2) // 3
$C.eval('1 + 2') // 3
$C.eval('a.x + a.y', 'a', {x:1, y:2}) // 3withStrict()/withoutStrict()
Use or not use strict mode. With strict mode, will check the input value whther is a number by isNaN
