Maths
The library supports a multitude of mathematical expressions, with quite a lot of flexibility.
Operators
You can use mathematical operators to carry out equations with roll results
d6*5 // roll a 6 sided die and multiple the result by 5
2d10/d20 // roll a 10 sided die 2 times and add the results together, then roll a 20 sided dice and divide the two totals
3d20^4 // roll a 20 sided die 3 times and raise the result to the power of 4 (Exponent)
3d20**4 // Equivalent to above (Exponent)
d15%2 // roll a 15 sided die and return the remainder after division (Modulus)
You can even use them to determine the number of dice to roll, or how many sides a die should have:
(4-2)d10 // subtract 2 from 4 (`2`) and then roll a 10 sided dice that many times
3d(2*6) // multiple 2 by 6 (`12`) and roll a dice with that many sides 3 times
Parenthesis
Parenthesis are recognised anywhere in notations to group sections and define the order of operations, as you would expect:
1d6+2*3: [4]+2*3 = 10
(1d6+2)*3: ([4]+2)*3 = 18
Functions
You can also use an array of mathematical formulas and functions.
It works with the following Javascript math functions:
abs
, ceil
, cos
, exp
, floor
, log
, max
, min
, pow
, round
, sign
, sin
, sqrt
, tan
Some examples:
round(4d10/3): round([3, 6, 1, 1]/3) = 3.7
floor(4d10/3): round([3, 6, 1, 1]/3) = 3.6
ceil(4d10/3): round([3, 6, 1, 1]/3) = 3.7
abs(4d10-25): abs([3, 6, 1, 1]-25) = 14
sqrt(4d10/3): sqrt([3, 6, 1, 1]) = 1.91
min(4d6, 2d10): min([3, 4, 1, 5], [10, 6]) = 13
Rounding negative numbers
Rounding negative numbers is handled differently to Javascript's Math.round()
.
round()
always rounds half away from zero, whereas Javascript's Math.round()
rounds half up.
Some examples:
Math.round(1.5) === 2
round(1.5) === 2
Math.round(1.3) === 1
round(1.3) === 1
Math.round(1.6) === 2
round(1.6) === 2
Math.round(-1.3) === -1
round(-1.3) === -1
Math.round(-1.6) === -2
round(-1.6) === -2
Math.round(-1.5) === -1 // Half is rounded "up" to -1
round(-1.5) === -2 // Half is rounded "down" to -2
TIP
If we're missing a math function that you want, let us know!