> For the complete documentation index, see [llms.txt](https://docs.digibee.com/documentation/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.digibee.com/documentation/connectors-and-triggers/pt-br/double-braces/double-braces-functions/numerical-functions.md).

# Funções numéricas

As funções numéricas realizam tratamentos de números e estão disponíveis para componentes que suportam expressões com *Double Braces*. Para saber como passar informações para os componentes utilizando esse recurso, leia a documentação [Funções *Double Braces*](/documentation/connectors-and-triggers/pt-br/double-braces/double-braces-functions.md).

## FORMATNUMBER

A função FORMATNUMBER é usada para formatar números em um formato de texto.

### Sintaxe

```json
FORMATNUMBER(value, "pattern", "locale":opcional, "rounding":opcional)
```

* **valor:** o número a ser formatado (pode ser um número ou uma *string*).
* **padrão:** o padrão a ser usado. Ele inclui um subpadrão positivo e um negativo, como "#,##0.00;(#,##0.00)". Cada subpadrão consiste em um prefixo, uma parte numérica e um sufixo. A presença do subpadrão negativo é opcional; se não for especificado, o subpadrão positivo precedido pelo sinal de menos localizado (‘-’ na maioria dos locais) serve como subpadrão negativo. Portanto, “0.00” sozinho é equivalente a “0.00;-0.00”.
* **locale:** a especificação do *locale* deve ser levada em consideração ao gerar números. Se o *locale* não estiver definido, en-us será levado em consideração.
* **arredondamento:** o tipo de arredondamento a ser usado. `UP`, `DOWN`, `CEILING`, `FLOOR`, `HALF_UP`, `HALF_DOWN`, `HALF_EVEN`. O padrão é `HALF_EVEN`.

### Padrão

Abaixo você encontrará os padrões de caracteres especiais aceitos pela função, que foram retirados da [documentação do Java](https://docs.oracle.com/javase/8/docs/api/java/text/DecimalFormat.html) e livremente traduzidos para o português.

| Símbolo | Localização         | Localizado? | Significado                                               |
| ------- | ------------------- | ----------- | --------------------------------------------------------- |
| 0       | Número              | Sim         | Dígito                                                    |
| #       | Número              | Sim         | Dígito, zero aparece como ausente                         |
| .       | Número              | Sim         | Separador decimal ou separador decimal monetário          |
| -       | Número              | Sim         | Sinal de menos                                            |
| ,       | Número              | Sim         | Separador de agrupamento                                  |
| E       | Número              | Sim         | Separador entre mantissa e expoente na notação científica |
| ;       | Limite de subpadrão | Sim         | Separador de subpadrões positivos e negativos             |
| %       | Prefixo ou sufixo   | Sim         | Multiplicar por 100 e exibir como porcentagem             |

Alguns outros exemplos de padrão:

| Padrão     | Número     | String formatada |
| ---------- | ---------- | ---------------- |
| ###.###    | 123.456    | 123.456          |
| ###.#      | 123.456    | 123.5            |
| ###,###.## | 123456.789 | 123,456.79000    |
| ###        | 9.95       | 009.95           |
| ##0.###    | 0.95       | 0.95             |

### Função em uso

#### Exemplo 1:

Vamos assumir que nós temos o número:

```json
{
    "num": 3.8454
}
```

E executemos o seguinte teste:

```json
{
  "test_UP": {{ FORMATNUMBER(message.num,"#.###", null, "UP") }},
  "test_DOWN": {{ FORMATNUMBER(message.num,"#.###", null, "DOWN") }},
  "test_CEILING": {{ FORMATNUMBER(message.num,"#.###", null, "CEILING") }},
  "test_FLOOR": {{ FORMATNUMBER(message.num,"#.###", null, "FLOOR") }},
  "test_HALF_UP": {{ FORMATNUMBER(message.num,"#.###", null, "HALF_UP") }},
  "test_HALF_DOWN": {{ FORMATNUMBER(message.num,"#.###", null, "HALF_DOWN") }},
  "test_HALF_EVEN": {{ FORMATNUMBER(message.num,"#.###", null, "HALF_EVEN") }}
}
```

Esse será o resultado:

```json
{
  "test_UP": "3.846",
  "test_DOWN": "3.845",
  "test_CEILING": "3.846",
  "test_FLOOR": "3.845",
  "test_HALF_UP": "3.845",
  "test_HALF_DOWN": "3.845",
  "test_HALF_EVEN": "3.845"
}
```

#### Exemplo 2:

Agora vamos supor que temos esses dois números:

```json
{
  "number": 123456.9123,
  "negative": -987.123
}
```

E apliquemos as seguintes conversões:

```json
{
  "number-US":{{ FORMATNUMBER(message.number, "###,###.###", "us-EN") }},
  "number-BR":{{ FORMATNUMBER(message.number, "###,###.###", "pt-BR") }},
  "number-BR-1":{{ FORMATNUMBER(message.number, "###,###.#", "pt-BR") }},
  "number-positive-BR-a": {{ FORMATNUMBER(message.number, "'+'###,###.###;'-'###,###.###", "pt-BR") }},
  "number-negative-BR": {{ FORMATNUMBER(message.negative, "###,###.###'C';###,###.###'D'", "pt-BR") }},
  "number-negative-BR-a": {{ FORMATNUMBER(message.negative, "'+'###,###.###;'-'###,###.###", "pt-BR") }}
}
```

Esse será o resultado:

```json
{
  "number-US": "123,456.912",
  "number-BR": "123.456,912",
  "number-BR-1": "123.456,9",
  "number-positive-BR-a": "+123.456,912",
  "number-negative-BR": "987,123D",
  "number-negative-BR-a": "-987,123"
}
```

## TODOUBLE

Utilizando *Double Braces*, você pode combinar a função com o acesso ao elemento do JSON de entrada de um componente.

A função TODOUBLE é aplicada para retornar o valor *double* de um número inteiro.

### Sintaxe

```json
TODOUBLE(num1)
```

Exemplo:

```json
{
    "a": 12
}
{
    "doub": {{ TODOUBLE( message.a ) }}
}
```

O retorno dessa função será 12.0.

## TOINT

Utilizando *Double Braces*, você pode combinar a função com o acesso ao elemento do JSON de entrada de um componente.

A função TOINT é aplicada para retornar o valor inteiro de um número *double*.

### Sintaxe

```json
TOINT(num1)
```

Exemplo:

```json
{
    "a": 12.345
}
{
    "int": {{ TOINT( message.a ) }}
}
```

O retorno dessa função será 12.

## TOLONG

Utilizando *Double Braces*, você pode ter retornado de um número um valor no tipo LONG. É possível receber tanto uma *string* como um número como parâmetro de entrada.

### Sintaxe

```json
TOLONG(num1)
```

Exemplo:

```json
{
    "a": 12.345
}
{
    "long": {{ TOLONG( message.a ) }}
}
```

O retorno dessa função será 12.

## TONUMBER

A função TONUMBER permite que você converta uma *string* para um valor numérico com base no seu formato de origem e *locale*.

### Sintaxe

```json
TONUMBER(string, formatSource, localeSource?, asInteger?)
```

Os parâmetros indicados com "?" são opcionais.

* **string:** *string* a ser convertida
* **formatSource:** formato de origem da *string*. Ex.: "###.###", "###.#", "###,###.##"
* **localeSource:** *locale* da *string*, que se não for definido, será considerado "en-us"
* **asInteger:** valor booleano que indica se a *string* deve ser convertida para um número inteiro. Caso não seja definido, o valor padrão será *false*.

Digamos que você precise converter duas *strings* referentes a um valor numérico genérico e um valor monetário:

```json
{
    "generic": "150.33",
    "currency": "R$ 300.754,15"
}
```

Aplicando a conversão:

```json
{
    "generic": {{ TONUMBER(message.generic, "###.##") }},
    "currency": {{ TONUMBER(message.currency, "'R$ '###,###.##", "pt-br") }}
}
```

O resultado será:

```json
{
    "generic": 150.33,
    "currency": 300754.15
}
```

Outros exemplos de formatação:

| String    | Formato | Numérico |
| --------- | ------- | -------- |
| "123.456" | ###.#   | 123.5    |
| "009.95"  | 000.### | 9.95     |
| "0.95"    | ##0.### | 0.95     |
| "-300"    | '-'###  | -300     |

## RANDOMNUMBERS

A função RANDOMNUMBERS permite que você gere números inteiros randômicos com base em um intervalo de valores.

### Sintaxe

```json
RANDOMNUMBERS(minValue, maxValue)
```

Digamos que você precise gerar um número randômico dentro do intervalo de 0 a 50000.

Gerando o número:

```json
{
    "randomNumber": {{ RANDOMNUMBERS(0, 50000) }}
}
```

O resultado será:

```json
{
    "randomNumber": 37122
}
```

Os valores que definem o intervalo numérico são inclusivos.

{% hint style="info" %}
A função tem limitação numérica e aceita apenas valores dentro do intervalo de -9223372036854775808 a 9223372036854775807. Qualquer valor fora desses limites acarretará em uma execução imprevisível da função.
{% endhint %}


---

# Agent Instructions
This documentation is published with GitBook. GitBook is the documentation platform designed so that both humans and AI agents can read, navigate, and reason over technical content effectively. Learn more at gitbook.com.

## Querying This Documentation
If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://docs.digibee.com/documentation/connectors-and-triggers/pt-br/double-braces/double-braces-functions/numerical-functions.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
