From the documentation:

```
StepRangeLen{T,R,S}(ref::R, step::S, len, [offset=1]) where {T,R,S}
StepRangeLen( ref::R, step::S, len, [offset=1]) where { R,S}
A range `r` where `r[i]` produces values of type `T` (in the second
form, `T` is deduced automatically), parameterized by a `ref`erence
value, a `step`, and the `len`gth. By default `ref` is the starting
value `r[1]`, but alternatively you can supply it as the value of
`r[offset]` for some other index `1 <= offset <= len`. In conjunction
with `TwicePrecision` this can be used to implement ranges that are
free of roundoff error.
```

so it seems that, for whatever reason, the way this is implemented, `step`

is in no way guaranteed to be stored as the same type which you gave it is an argument, but the iterable return values *are* guaranteed to give you a `Float32`

in your case.

I suspect they did this because of rounding error.