# Number

A number is, depending on scope, either a single precision floating-point number (when talking about scripting) or a range of numerical types when talking about config context.

## Scripting

In SQF, there are multiple accepted number formats.
However, all of them will result in the same `SCALAR`

(typeName) value type.

The **largest positive** number that can be archived is `3.4028235e38`

and the **largest negative** is `-3.4028235e38`

.

It also is possible to generate positive or negative infinite values using either `1e39`

(string representation: `1.#INF`

) or `-1e39`

(string representation: `-1.#INF`

).

To check, if a number is finite, one can use the finite operator.

`(((\$|0x)[0-9a-fA-F]+)|(\.[0-9]+))|(\b[0-9]+(\.[0-9]+|[eE][-+]?[0-9]+)?)\b`

### Decimal (Base 10)

A decimal number is your normal `0.5`

syntax stuff with one extra: You may omit the initial pack of digits.

Some Examples would be:

`5.197`

`0.47`

`16.0`

`.8314`

`12345`

A regex catching these kind of numbers could look like this `((\.[0-9]+)|(\b[0-9]+(\.[0-9]+)?))\b`

#### Scientific Notation

The Scientific Notation is a way of expressing numbers that are too big or too small to be conveniently written in decimal form.

It starts of like a normal decimal and then gets expressed by an `E`

(Not case-sensitive, thus `e`

is also valid) followed by an __optional__ `+`

or `-`

sign and ends with a range of digits.

Some Examples would be:

`1.23E4 ⇔ 1.23 ⋅ 10`

^{4 }⇔ 12300`5e-2 ⇔ 5 ⋅ 10`

^{-2}⇔ 0.05

A regex catching these kind of numbers could look like this `([0-9]+.)?[0-9]+[eE][+-]?[0-9]+`

### Hexadecimal (Base 16)

In SQF, hexadecimal (also base 16, or hex) is a positional numeral system with a base of 16.
They start either with `0x`

or with a single `$`

.

This gets followed by one of the following characters: `0 1 2 3 4 5 6 7 8 9 A B C D E F`

.

Note that casing does not matter, thus both `0xa`

and `0xA`

are valid.

Some Examples would be:

`0xa5`

`$5C`

`$FFFFFF`

`0x123ABC`

A regex catching these kind of numbers could look like this `((\$|0x)[0-9a-fA-F]+)\b`

## Config

Unlike scripting, configs actually do allow for multiple number types (integer, float, etc.). They are stored proper with their corresponding type in mind.