To be even clearer:

```
nouvelles_infections = Int[susceptibles[jour - 1] * taux_transmission * infectes[jour - 1] / population_totale]
```

Here you are saying the number of new infections is given by the number of susceptible agents in the population yesterday, multiplied by a transmission rate and the share of infected in the total population. Clearly it is unlikely that this number will be an integer - the transmission rate is probably not an exact integer, and neither will the share of infected in the total population be. So this calculation is bound to create a non-integer number; if you want the number to be integer you have to round it explicitly, so:

```
nouvelles_infections = round(Int, susceptibles[jour - 1] * taux_transmission * infectes[jour - 1] / population_totale)
```

Note here I’ve replaced `Int[...]`

with `round(Int, ...)`

. This will give a single integer number which is then assigned to `nouvelles_infections`

. It’s not clear to me why you are doing `Int[...]`

here but note that this creates an array of integers with a single number in it, which is not the same as just the number. Later on you are doing:

```
push!(susceptibles, susceptibles[jour - 1] - nouvelles_infections)
```

which suggests that `susceptibles`

is a vector that you are using to track the number of not-yet-infected over time. Then `susceptibles[jour-1]`

is an element of that vector, i.e. likely a single integer, which means `susceptibles[jour - 1] - nouvelles_infections`

will fail if `nouvelles_infections`

is an array rather than an integer:

```
julia> 4 - [2]
ERROR: MethodError: no method matching -(::Int64, ::Vector{Int64})
For element-wise subtraction, use broadcasting with dot syntax: scalar .- array
```