TMT uses Decimals almost everywhere a numeric value is needed. They are different from normal Number
s in that they can go much, much higher, but are objects instead of a primitive. That means handling them is a little more complicated than Number
s. Fortunately, this guide will help.
Creating Decimal
s
Being an object, Decimal
s need to be created via a constructor. Those are lines of code that “construct” the object based on data you give it. Here’s an example of creating a Decimal
with value zero:
new Decimal(0)
You can replace the 0 with any other valid Number value and it’ll also work. However, since Decimal
s can go above the highest Number value, you’ll also want to be aware of this constructor:
new Decimal("1e1000")
This one takes a string representation of a number, and you can input numbers greater than 1e308 this way.
Modifying Decimal
s
Decimals do not work with math operators! You cannot use +, -, /, or * with Decimals! Doing so will convert the Decimal
to a Number
and you’ll start getting tons of errors!
Instead, Decimal
s have a ton of functions that perform math operations on them - even more than javascript Number
s have! The basic ones are stuff like add, sub, times, sqrt, etc. There’s a lot of these, and unfortunately there isn’t a good list of all of them, but if you create a Decimal
in your browser’s console you can use autocomplete or just print out the object to see a list of all of them.
There’s another important caveat, though! None of these functions actually modify the Decimal
. They return the calculated value. That means if you want to add 1 to a Decimal
, for example player.points
, you have to do this:
player.points = player.points.add(1)
There are several synonyms for math operations, like .plus
instead of .add
, that might help you remember it’s returning a new value rather than modifying it’s current value. Forgetting this is a very common mistake, so don’t beat yourself up for making it. Just know it’s way better this way, once you start getting into complicated formulas.
Displaying Decimal
s
By default, printing a Decimal in HTML will include a lot of precision you may not need. There are several functions you can call to get the number in specific formats, like toExponential
or toFixed
, but in TMT there are also a couple utility functions that produce nice-looking strings for a variety of different Decimal
values. Typically you’ll use either format
or formatWhole
, depending on whether or not you want to show decimal places on small values.