# Number functions

| Function             | Description                                                                                                                                  | Example Expression        | Example Result |
| -------------------- | -------------------------------------------------------------------------------------------------------------------------------------------- | ------------------------- | -------------- |
| `Min(a, b)`          | Returns the lesser of a and b                                                                                                                | `Min(1, 2)`               | 1              |
| `Max(a, b)`          | Returns the greater of a and b                                                                                                               | `Max(1, 2)`               | 2              |
| `Ceil(x)`            | Returns the value of x rounded up to the nearest integer                                                                                     | `Ceil(1.2)`               | 2              |
| `Floor(x)`           | Returns the value of x rounded down to the nearest integer                                                                                   | `Floor(1.5)`              | 1              |
| `Round(x)`           | Returns the value of x rounded to the nearest integer                                                                                        | `Round(1.8)`              | 2              |
| `Pow(x,y)`           | Returns the result of x raising to the power y.                                                                                              | `Pow(8,3)`                | "512"          |
| `Format(x, pattern)` | Formats x as a string, using the given pattern. See [Formats](https://help.novacuraflow.com/6.12/development/flow-studio/flowscript/formats) | `Format(0.33333333, "F")` | "0.33"         |
| `Str(x)`             | Changes the numeric variable x into a string value. This is rarely necessary as Flow automatically coerces numeric values into string value. | `Str(7)`                  | "7"            |
| `Val(x)`             | Changes the string variable x into a numeric value. This is rarely necessary as Flow automatically coerces string values into numeric value. | `Val(7)`                  | "7"            |
| `IsNumber(x)`        | Returns a value indicating whether 'x' is a number.                                                                                          | `IsNumber("hello")`       | false          |
| `IsNaN(x)`           | Returns a value indicating whether 'x' is a "not a number" value (usually originating in a null value from a database)                       | `IsNumber(myRecord.x)`    | N/A            |

### Mathematical expressions

FlowScript supports algebraic expressions using common mathematical operators and parenthesized expressions. For example, the expression:

```
{x + 1}
```

...will print out as the value of variable *x* plus one (provided the variable *x* has a content which can be interpreted as a number).

Numeric literals (e.g. the 1 in the expression `{x + 1}`) can be positive or negative, integer or decimal. For decimals, always use the dot character, e.g. 1.5, whether or not your Flow environment is used in a language/region where the comma is used as decimal separator. Note, however, that the numeric content of variables (as opposed to literals) is interpreted less restrictively; both the comma and the period can be used as a decimal separator. This ensures that Flow works with user-input values in regions using a decimal comma (such as Scandinavia) as well as regions using a decimal point (such as the US).

#### Mathematical operators <a href="#mathematical-operators" id="mathematical-operators"></a>

The following listing contains all the algebraic operators available in FlowScript.

**Plus (+)**

Adds two numbers. If the left side value (L) is a **date** and the right side value (R) is a **number**, the expression returns a new date representing L with R number of days added.

| Expression  | Result                                                                                                             |
| ----------- | ------------------------------------------------------------------------------------------------------------------ |
| `a + b`     | If *a* is a number, the sum of variables *a* and *b*; if *a* is a date, a new date representing *a* plus *b* days. |
| `now() + 1` | A date variable representing tomorrow.                                                                             |

**Minus (-)**

Subtracts two numbers. If the left side value (L) is a **date** and the right side value (R) is a **number**, the expression returns a new date representing L with R number of days subtracted.

| Expression  | Result                                                                                                                          |
| ----------- | ------------------------------------------------------------------------------------------------------------------------------- |
| `a - b`     | If *a* is a number, the difference between variables *a* and *b*; if *a* is a date, a new date representing *a* minus *b* days. |
| `now() - 1` | A date variable representing yesterday.                                                                                         |

**Multiplication and Division (\* /)**

Multiplies or divides two numbers.

| Expression    | Result                                  |
| ------------- | --------------------------------------- |
| `a * b`       | *a* multiplied by *b*                   |
| `a * 1.5 * b` | *a* multiplied by 1.5 multiplied by *b* |
| `a / 10`      | *a* divided by 10                       |
