# Assign a float value to a vector originally of integer type

I created a vector:

``````a = [1, 2, 3 ]
``````

Then I tried to modify its value:

``````a[2] = 0.1
``````

I got an error.

This kind of performace is ok in MATLAB.

How to make it work in Julia? I have to declare that ‘a’ is a float vector at the very beginning?

Yes.

``````a = Float64[1, 2, 3 ]
``````
1 Like

Alternatively you can include a float in your vector:

``````julia> [1, 2, 3.0]
3-element Vector{Float64}:
1.0
2.0
3.0
``````

(you could even go so far to leave out the zero - `[1, 2, 3.]` will work but I consider these decimal-less float numbers a bit of a foot gun)

1 Like

It’s OK in Matlab because `[1,2,3]` is already a double float array in Matlab

``````>> class(a)
ans =
'double'
``````

If you modify `a` you will get

``````>> a(2) = 0.1
a =
1.0000    0.1000    3.0000
``````

You have to take extra steps to make an integer array in Matlab:

``````>> b = int32([1,2,3])
b =
1×3 int32 row vector
1   2   3
``````

Now, if you modify `b`, it rounds to the closest `int32`:

``````>> b(2) = 0.1
b =
1×3 int32 row vector
1   0   3
``````
4 Likes

To be clear, the reason this works in Matlab is that Matlab by default stores all numbers as floating point under the hood.

In Julia, the numbers `[1, 2, 3]` are all interpreted as integers, and a vector containing only integers will be a vector of integers. You can’t insert a floating point value directly into an integer type, so you get an error.

These proposed solutions are to either specify up front that the vector should be of a floating point type, or to specify the numbers as `[1.0, 2.0, 3.0]` since those are interpreted as floating point values.

3 Likes