# Model a Rounded Variable

There might be cases where you need to model a variable `var1` as the closest integer to another variable or parameter `value`. Essentially, a constraint like:

```var1 = Round(value)
```

However, using the `Round()` function in a constraint is not allowed in a mixed integer program and results in an error message, especially if `value` is also a variable.

```Constraint programming constraints cannot be used in combination with real valued variables, only with integer valued variables,
element valued variables, and activities.
```

We can avoid such errors by declaring `var1` as an integer variable and using two auxiliary non-negative variables in a target constraint as shown below:

```var1 = value + aux1 - aux2
```

Depending on the direction of your math program, you add (minimize) or subtract (maximize) the sum `aux1+aux2` to the objective function. This ensures that only one of `aux1` or `aux2` will take a non-zero value.

The possible situations are:

1. `value` is integer: `aux1 = aux2 = 0`

2. `Round(value) = Ceil(value)`: `aux2 = 0` and `aux1 = Ceil(value) - value`

3. `Round(value) = Floor(value)`: `aux1 = 0` and `aux2 = value - Floor(value)`

## Example

Let `value = 2.3`, whose closest integer value is 2. So we want `var1 = 2`. This is situation 3 from above, so our constraint will result in:

```var1 = 2.3 + 0 - 0.3 = 2
```