quickmathjs
Version:
A simple web-based plaintext calculator harnessing the power of math.js for intuitive free-form calculations. Now with a command-line interface (CLI) for testing purposes.
304 lines (252 loc) • 5.54 kB
Markdown
# User Guides And Examples
## Syntax Quickstart
How to get results from expression and assign variables
### Arithmetic with Variables and output plus assignment
**Given:**
```
a = 5
b = a + 1 =
```
**Expect:**
```
a = 5
b = a + 1 = 6
```
### Multiple Variable Assignments
**Given:**
```
x = y = z = 5 + 2 =
```
**Expect:**
```
x = y = z = 5 + 2 = 7
```
### Test Case 12: Cascading Calculations
**Given:**
```
a = 5
b = a + 1 = 9
c = b + 1
d = c + 1 = 6
```
**Expect:**
```
a = 5
b = a + 1 = 6
c = b + 1
d = c + 1 = 8
```
## Basic Operations
### Basic Arithmetic
**Given:**
```
1 + 1 =
```
**Expect:**
```
1 + 1 = 2
```
### Variable Assignment
**Given:**
```
a = 5
```
**Expect:**
```
a = 5
```
### Arithmetic, Multiplication and other basic operations with Variables
**Given:**
```
a = 6
a + 3 =
a - 3 =
a * 3 =
a / 3 =
a ^ 3 =
a % 3 =
```
**Expect:**
```
a = 6
a + 3 = 9
a - 3 = 3
a * 3 = 18
a / 3 = 2
a ^ 3 = 216
a % 3 = 0
```
## Medium Operations
### More Advance Operators
**Given:**
```
sqrt(9) =
nthRoot(27, 3) =
5! =
```
**Expect:**
```
sqrt(9) = 3
nthRoot(27, 3) = 3
5! = 120
```
### Trigonometric Functions and output plus assignment
**Given:**
```
sin(pi/2) =
cos(pi) =
tan(pi/4) =
asin(0.5) =
acos(0.5) =
log(100) =
exp(2) =
```
**Expect:**
```
sin(pi/2) = 1
cos(pi) = -1
tan(pi/4) = 0.9999999999999999
asin(0.5) = 0.5235987755982989
acos(0.5) = 1.0471975511965979
log(100) = 4.605170185988092
exp(2) = 7.38905609893065
```
### Test Case 15: Units
**Given:**
```
5 m + 3 m = 2 m
10 kg * 10 m/s^2 =
```
**Expect:**
```
5 m + 3 m = 8 m
10 kg * 10 m/s^2 = 100 N
```
### Test Case 16: Assorted Direct Results
**Given:**
```
1/0 = Infity
324 = 32
hex(324) = 0x14
0b1100100 =
bin(324) = 0b0100
```
**Expect:**
```
1/0 = Infity Error: Infinity. Possible Division by zero
324 = 324
hex(324) = 0x144
0b1100100 = 100
bin(324) = 0b101000100
```
### Test Case 16: Constants
**Given:**
```
2 * pi =
2 * e =
tau/2 =
2 * phi =
```
**Expect:**
```
2 * pi = 6.283185307179586
2 * e = 5.43656365691809
tau/2 = 3.141592653589793
2 * phi = 3.23606797749979
```
### Currency pairs and pair ratios
Tip: only alphanumeric characters are allowed in unit names
Note: `EUR inc GST` is automatically converted internally into `EURincGST`
**Given:**
```
# Glimmer to Shimmer
GLM/SHM = 50
5 SHM to GLM = ?
# Euros to US Dollars
EUR/USD = 1.30
5 USD to EUR = ?
# Euros incusive of GST (10% gst tax)
EURincGST/EUR = 1.1
10.0 EUR in EURincGST = ?
# Euros incusive of GST (10% gst tax)
EUR inc GST / EUR = 1.1
10.0 EUR in EUR inc GST = ?
```
**Expect:**
```
# Glimmer to Shimmer
GLM/SHM = 50
5 SHM to GLM = 250 GLM
# Euros to US Dollars
EUR/USD = 1.30
5 USD to EUR = 6.5 EUR
# Euros incusive of GST (10% gst tax)
EURincGST/EUR = 1.1
10.0 EUR in EURincGST = 11 EURincGST
# Euros incusive of GST (10% gst tax)
EUR inc GST / EUR = 1.1
10.0 EUR in EUR inc GST = 11 EUR inc GST
```
### Use phrases as variable and define custom units
In this example we define dogs and cats as `fancy animals`.
Internally we are concating `fancy animals` into `fancyanimals` so it is compatible with math.js .
Note that `fancyanimals^2` is not expanded, but we opted not to put in the effort to expand it
as it can be argued that it would be easier to read such compounded units.
**Given:**
```
pitbull dogs = 234 fancy animals
flowery cats = 423 fancy animals
animal count = pitbull dogs + flowery cats
animal count: ?
animal count = pitbull dogs * flowery cats
animal count: ?
```
**Expect:**
```
pitbull dogs = 234 fancy animals
flowery cats = 423 fancy animals
animal count = pitbull dogs + flowery cats
animal count: 657 fancy animals
animal count = pitbull dogs * flowery cats
animal count: 98982 fancyanimals^2
```
## Use Cases Examples
### Catering Use Case Example
Maybe you want to do some pricing estimations?
This shows how you can use your own units e.g. `pax` as it is declared during assignment.
Also shows how you can use math.js function declaration to define your own equations.
And also shows how units can have spaces if needed.
```calc
# Range Quote Input
upper_bound_price = 50.33 AUD exc gst / pax
upper_pax_count = 30 pax
lower_bound_price = 55.55 AUD exc gst / pax
lower_pax_count = 10 pax
# Slope Intercept Formula (y = mx + c)
m(y1, y2, x1, x2) = ((y1 - y2) / (x1 - x2))
c(y1, y2, x1, x2) = y1 - m(y1, y2, x1, x2)*x1
y_linear(x, y1, y2, x1, x2) = m(y1, y2, x1, x2)*x + c(y1, y2, x1, x2)
# Food Price Per Person Function
foodPricePP(paxCount) = y_linear(paxCount, upper_bound_price, lower_bound_price, upper_pax_count, lower_pax_count)
foodPricePP_rounded(paxCount) = round(foodPricePP(paxCount), 2, AUD exc gst / pax )
# Formatted Output Functions
style = {notation: 'fixed', precision: 2}
foodPricePPout(paxCount) = format(foodPricePP_rounded(paxCount) , style)
foodTotalPrice(paxCount) = format(foodPricePP_rounded(paxCount) * paxCount , style)
# People Count To Per Person Price
foodPricePPout(10 pax): 55.55 AUD exc gst / pax
foodPricePPout(11 pax): 55.29 AUD exc gst / pax
foodPricePPout(12 pax): 55.03 AUD exc gst / pax
#... etc...
foodPricePPout(28 pax): 50.85 AUD exc gst / pax
foodPricePPout(29 pax): 50.59 AUD exc gst / pax
foodPricePPout(30 pax): 50.33 AUD exc gst / pax
# People Count To Total Food Cost
foodTotalPrice(10 pax): 555.50 AUD exc gst
foodTotalPrice(11 pax): 608.19 AUD exc gst
foodTotalPrice(12 pax): 660.36 AUD exc gst
#... etc...
foodTotalPrice(28 pax): 1423.80 AUD exc gst
foodTotalPrice(29 pax): 1467.11 AUD exc gst
foodTotalPrice(30 pax): 1509.90 AUD exc gst
```