Number

Contents

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.

Regex to match all numbers in SQF is `(((\\$|0x)[0-9a-fA-F]+)|(\.[0-9]+))|(\b[0-9]+(\.[0-9]+|[eE][-+]?[0-9]+)?)\b`
Due to technical limitations, the precision of floating-point numbers is limited. Please refer to IEEE 754 for more info about the technical details.

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 ⋅ 104 ⇔ 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]+`

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.