# Numerical operators

Applies to: ✅ Azure Data Explorer ✅ Azure Monitor ✅ Microsoft Sentinel

The types `int`

, `long`

, and `real`

represent numerical types.
The following operators can be used between pairs of these types:

Operator | Description | Example |
---|---|---|

`+` |
Add | `3.14 + 3.14` , `ago(5m) + 5m` |

`-` |
Subtract | `0.23 - 0.22` , |

`*` |
Multiply | `1s * 5` , `2 * 2` |

`/` |
Divide | `10m / 1s` , `4 / 2` |

`%` |
Modulo | `4 % 2` |

`<` |
Less | `1 < 10` , `10sec < 1h` , `now() < datetime(2100-01-01)` |

`>` |
Greater | `0.23 > 0.22` , `10min > 1sec` , `now() > ago(1d)` |

`==` |
Equals | `1 == 1` |

`!=` |
Not equals | `1 != 0` |

`<=` |
Less or Equal | `4 <= 5` |

`>=` |
Greater or Equal | `5 >= 4` |

`in` |
Equals to one of the elements | see here |

`!in` |
Not equals to any of the elements | see here |

Note

To convert from one numerical type to another, use `to*()`

functions. For example, see `tolong()`

and `toint()`

.

## Type rules for arithmetic operations

The data type of the result of an arithmetic operation is determined by the data types of the operands. If one of the operands is of type `real`

, the result will be of type `real`

. If both operands are of integer types (`int`

or `long`

), the result will be of type `long`

.

Due to these rules, the result of division operations that only involve integers will be truncated to an integer, which might not always be what you want. To avoid truncation, convert at least one of the integer values to `real`

using the todouble() before performing the operation.

The following examples illustrate how the operand types affect the result type in division operations.

Operation | Result | Description |
---|---|---|

`1.0` `/` `2` |
`0.5` |
One of the operands is of type `real` , so the result is `real` . |

`1` `/` `2.0` |
`0.5` |
One of the operands is of type `real` , so the result is `real` . |

`1` `/` `2` |
`0` |
Both of the operands are of type `int` , so the result is `int` . Integer division occurs and the decimal is truncated, resulting in `0` instead of `0.5` , as one might expect. |

`real(1)` `/` `2` |
`0.5` |
To avoid truncation due to integer division, one of the `int` operands was first converted to `real` using the `real()` function. |

## Comment about the modulo operator

The modulo of two numbers always returns in Kusto a "small non-negative number".
Thus, the modulo of two numbers, *N* % *D*, is such that:
0 ≤ (*N* % *D*) < abs(*D*).

For example, the following query:

```
print plusPlus = 14 % 12, minusPlus = -14 % 12, plusMinus = 14 % -12, minusMinus = -14 % -12
```

Produces this result:

plusPlus | minusPlus | plusMinus | minusMinus |
---|---|---|---|

2 | 10 | 2 | 10 |