# Numbers - Manhunter07/MFL GitHub Wiki

Numbers are numeric integer or real values that support arithmetic operations. They are floating-point values with an extended precision whose value range is represented by the constants MinValue and MaxValue. Numbers support three ways of notation: Decimal, scientific and hexadecimal, see below for a detailed overview and explaination.

## Decimals

Decimals use the standard numeric notation, common in most programming languages. They start with a digit from `0` to `9` and may contain a dot separating the integer from the fractional part. Decimals may also use the scientific notation with a ten's exponent. The following code demonstrates how decimal numbers can be used:

``````121 \represents 121.0\
5.79 \represents 5.79\
28. \represents 28.0 as trailing zeros in fractional parts are optional\
8e2 \represents 800.0\
2.61e-4 \represents 0.000261\
``````

Hexadecimals are numbers to the base 16. Like most common languges, MFL supports their notation using a special indicator. They are prepended by a dollar sign (`\$`), similar to Pascal. Hexadecimals in MFL follow the same syntax and limitations as those in Pascal, including not supporting fractional parts or the scientific notation. They contain a number of digits from `0` to `9` and from `a` to `f`. Char casing is ignored, but the convention recommends the use of lowercase numbers. Just like normal decimal numbers, hexadecimals are internally stored as floating-point numbers with no special treatment. To convert an integer number back to its hexadecimal string representation, use the `Hex` function from the `System` package.

## Types

There are different numeric types available to be used as type constraints for function parameters or for different purposes. The most generic one is `Number`, supporting any numeric values including the special values of `NaN` and `Inf`. There are also different numneric type constructors available, including `integer`, `rangeint` and `sizeint`. Other more generic type constructors like `range` or `enum` can be used with numeric arguments, too.
Like any other data type, numbers support the type compatibility check operator (`?:`). It returns `True` on `Number`, but also any other type that supports the respected value(s).