# Number

(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)

## 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 properly stored with their corresponding type in mind.

In a config, a Number can also mean a Boolean: in Description.ext for example, `disabledAI = 1;` means true.
```class MyClass
{
myInt = 1;		// integer;
myFloat = 0.01;	// float;
};

// description.ext example
disabledAI = 1;		// boolean: 0 = false, anything else = true (usually 1)
```