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.