Description
string-math is a module (function) that computes the [Number] result from the [String] arithmetical formula.
- It does not use
eval() - It uses regular expressions to parse [String] formulas
"2+2"into [Number] formulas2+2. Then it is performed as the common JavaScript arithmetic operation.
"2 + 2" //4
"3*(5-2)" //9
" 2.5 * 2.5 / .1" //62.5
"3.5+5*(-4-(3/(3+1)-12*3-.2*22)-16/4*12-5/(2)+3.5+2.5*(1.5-2*7))-16" //-225.5
".25e+2*10" //250
- Any bugs found? Give me to know on GitHub
- If you need to perform arithmetic formulas with the floating point precision (avoid
0.30000000000000004return values) or to perform arithmetic formulas with big numbers, check outexact-mathpackage. It implementsstring-mathfeatures as theexactMath.formulamethod.
Installation
with NodeJS / bundlers
npm install string-math
var stringMath = require('string-math');
stringMath("--1") //1
stringMath("2/-2") //-1
stringMath("-5-5") //-10
with Browser
1. Add string-math.js to the HTML file.
<head>
<script src="./string-math.js"></script>
</head>
Any other dependencies are needed.
2. Use stringMath global Function from string-math.js.
var result = stringMath("2+2");
Browser Support
| Chrome | Firefox | IE | Safari | Opera | ||
|---|---|---|---|---|---|---|
| yes | yes | yes | yes | yes |
Tests
> git clone https://github.com/devrafalko/string-math.git
> cd string-math
> npm install
> npm test
> npm test deep //displays error messages
Usage
stringMath(expression[,callback])
expression [String]
- the arithmetical formula
- it can contain:
[0-9]digits1.5,0.5or.5decimal fractions-5,-.4,-5.55negative values2e-2,.25e+12,-3e-10exponential notation values*multiplication sign/division sign+plus sign-subtraction sign(and)parentheses
callback [Function] (optional) (synchronous)
- by default, if the
callbackargument is omitted and theexpressionis of incorrect type or is invalid, theErrorobject isthrown. If thecallbackis defined, theErrorobject is passed through thecallbackfunction, rather than beingthrown. - if the [Function]
callbackargument is defined, it is called with the following arguments:- [0]
error
It equalsnull, if theexpressionis of correct type and is valid math formula.
Otherwise it equalsErrorobject. - [1]
result
It equalsnullif theexpressionis of incorrect type or if the math formula is invalid.
Otherwise it equals [Number] result.
- [0]
Return
If the math formula is of correct type and is valid, it returns the [Number] result. Otherwise it returns null.
Tips
- the arithmetic order of operations is respected:
- parentheses first
- then division and multiplication (from left to right)
- then addition and subtraction (from left to right)
- the multiplication sign can be omitted before parentheses;
4(2+1); equals to `4(2+1)`* - the following signs combinations are allowed:
2 * -2; equals to `2 (-2)`*2 / -2; equals to2 / (-2)+2 + 2; equals to2 + 22 + +2; equals to 2 + 2-2 - -2equals to-2 + 2-2 - +2equals to-2 - 2-2 + -2equals to-2 - 2
- the (multi)spaces between values, signs and parentheses are allowed:
2 + 22 + ( -2 - -2)2 + (+2 + +4 / -1)-.1 - -52 + 3e-5.25e+5 * -.25e-5
- the spaces are not allowed between:
- negative sign and value:
-2 - - 2 - period and digit in decimal fraction:
5 + . 3 - exponential notation formula:
.2 e-5,2e - 5,3e +10
- negative sign and value: